ViewPager 中的滑动方向

新手上路,请多包涵

我有一个使用 ViewPager 和 FragmentStatePagerAdapter 的 Android 应用程序。但是,我需要添加一项新功能,我必须知道滑动方向才能从一个片段视图向左或向右移动到另一个片段视图。 (即,当我向左滑动时,我会做一件事,而当我向右滑动时,我会做另一件事)。

请注意,我不需要在滑动结束后发生事件。我必须在滑动发生时执行这些事件。我想过使用 setOnPageChangeListener() 但它没有告诉我滑动方向。你能告诉我如何确定滑动方向吗?

谢谢。

原文由 Greeso 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 405
1 个回答

我遇到了这个问题,需要知道滑动 方向,以防止在某个方向滑动。这是我解决问题的方法,希望对某人有所帮助。我发现前面的所有示例都无法满足我的需要。

如果您将 ViewPager 子类化,则可以响应 onInterceptTouchEvent(MotionEvent event)onTouchEvent(MotionEvent event) ViewPager 方法

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean wasSwipeToRight = this.wasSwipeToRightEvent(event));
    // Do what you want here with left/right swipe

    return super.onInterceptTouchEvent(event);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean wasSwipeToRight = this.wasSwipeToRightEvent(event));
    // Do what you want here with left/right swipe

    return super.onTouchEvent(event);
}

这是调用以确定事件方向的方法。

 // Stores the starting X position of the ACTION_DOWN event
float downX;

/**
 * Checks the X position value of the event and compares it to
 * previous MotionEvents. Returns a true/false value based on if the
 * event was an swipe to the right or a swipe to the left.
 *
 * @param event -   Motion Event triggered by the ViewPager
 * @return      -   True if the swipe was from left to right. False otherwise
 */
private boolean wasSwipeToRightEvent(MotionEvent event){
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            downX = event.getX();
            return false;

        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
            return downX - event.getX() > 0;

        default:
            return false;
    }
}

原文由 dsrees 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题