Android 在两个方向上切换布局?

Android 在两个方向上切换布局?,android,Android,我喜欢新的泳衣布局!它看起来很棒,而且很容易使用。 但我想在两个方向上使用它。我有一个信息屏幕,我想 通过从上到下滑动来加载旧邮件,我想通过从下到上滑动来加载新邮件 这个例子: 非常简单地解释了如何实现从上到下的滑动,但如何实现双向滑动?基于源代码,它只监听垂直变化(请参见公共布尔onTouchEvent(MotionEvent事件)) 您应该能够重写该类,并自己实现该重写,以使其能够侦听水平和垂直滑动,但我认为没有任何现成的东西允许您这样做 最令人感兴趣的是: case MotionEvent

我喜欢新的泳衣布局!它看起来很棒,而且很容易使用。 但我想在两个方向上使用它。我有一个信息屏幕,我想 通过从上到下滑动来加载旧邮件,我想通过从下到上滑动来加载新邮件

这个例子: 非常简单地解释了如何实现从上到下的滑动,但如何实现双向滑动?

基于源代码,它只监听垂直变化(请参见
公共布尔onTouchEvent(MotionEvent事件)

您应该能够重写该类,并自己实现该重写,以使其能够侦听水平和垂直滑动,但我认为没有任何现成的东西允许您这样做

最令人感兴趣的是:

case MotionEvent.ACTION_MOVE: 
             if (mDownEvent != null && !mReturningToStart) { 
                 final float eventY = event.getY(); 
                 float yDiff = eventY - mDownEvent.getY(); 
                 if (yDiff > mTouchSlop) { 
                     // User velocity passed min velocity; trigger a refresh 
                    if (yDiff > mDistanceToTriggerSync) { 
                        // User movement passed distance; trigger a refresh 
                         startRefresh(); 
                         handled = true; 
                         break; 
                     } else { 
                         // Just track the user's movement 
                         setTriggerPercentage( 
                                 mAccelerateInterpolator.getInterpolation( 
                                         yDiff / mDistanceToTriggerSync)); 
                         float offsetTop = yDiff; 
                         if (mPrevY > eventY) { 
                             offsetTop = yDiff - mTouchSlop; 
                         } 
                         updateContentOffsetTop((int) (offsetTop)); 
                         if (mPrevY > eventY && (mTarget.getTop() < mTouchSlop)) { 
                             // If the user puts the view back at the top, we 
                             // don't need to. This shouldn't be considered 
                             // cancelling the gesture as the user can restart from the top. 
                             removeCallbacks(mCancel); 
                         } else { 
                             updatePositionTimeout(); 
                         } 
                         mPrevY = event.getY(); 
                         handled = true; 
                     } 
                 } 
             } 
             break; 
case MotionEvent.ACTION\u移动:
如果(mDownEvent!=null&&!mreturningstatart){
final float eventY=event.getY();
float yDiff=eventY-mDownEvent.getY();
如果(yDiff>mTouchSlop){
//用户速度超过最小速度;触发刷新
如果(yDiff>mdistancetTriggerSync){
//用户移动超过距离;触发刷新
startRefresh();
已处理=正确;
打破
}否则{
//只需跟踪用户的移动即可
setTriggerPercentage(
mAccelerateInterpolator.getInterpolation(
yDiff/mDistanceToTriggerSync);
浮动偏移量=yDiff;
如果(mPrevY>eventY){
offsetTop=yDiff-mTouchSlop;
} 
updateContentOffsetTop((int)(offsetTop));
如果(mPrevY>eventY&&(mTarget.getTop()
请注意,我不推荐这种方法。它不是标准的接口,没有人会期望它以这种方式工作,这可能会让人困惑。在自定义布局中重写此方法还有一个额外的风险,即将来出现新版本并希望升级时,您可能需要重做所有操作