如何知道viewpager是向左还是向右滚动?

Ngu*_*inh 28 android android-viewpager

我正在使用ViewPager(支持库).我想知道每次ViewPager更改可见页面时,它都向左或向右滚动.

请给我一个解决方案.欢迎任何推荐.

谢谢

Moh*_*eem 40

设置setOnPageChangeListener为你的ViewPager

并在

private int lastPosition = 0;
Run Code Online (Sandbox Code Playgroud)

  • 但是一旦屏幕完全滚动,它就会给出结果...是否有任何方法可以开始滚动? (11认同)

Gui*_*lhE 36

这不是一个完美的解决方案,但是这是一种在开始滑动时检查滑动方向的方法:

new ViewPager.OnPageChangeListener() {

            private static final float thresholdOffset = 0.5f;
            private boolean scrollStarted, checkDirection;

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                if (checkDirection) {
                    if (thresholdOffset > positionOffset) {
                        Log.i(C.TAG, "going left");
                    } else {
                        Log.i(C.TAG, "going right");
                    }
                    checkDirection = false;
                }
            }

            @Override
            public void onPageSelected(int position) {}

            @Override
            public void onPageScrollStateChanged(int state) {
                if (!scrollStarted && state == ViewPager.SCROLL_STATE_DRAGGING) {
                    scrollStarted = true;
                    checkDirection = true;
                } else {
                    scrollStarted = false;
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)


编辑:有一个更优雅的方法,涉及使用ViewPager.PageTransformer和检查它的位置间隔:

...
myViewPager.setPageTransformer(true, new PageTransformer());
...

public class PageTransformer implements ViewPager.PageTransformer {
    public void transformPage(View view, float position) {

        if (position < -1) { 
            // [-00,-1): the page is way off-screen to the left.
        } else if (position <= 1) { 
            // [-1,1]: the page is "centered"
        } else { 
            // (1,+00]: the page is way off-screen to the right.           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以从以下方面了解更多信息:使用ViewPager进行屏幕幻灯片

  • 请注意,同时为多个页面调用`transformPage()`,并且某些页面最终可能会为其位置值设置不同的符号. (2认同)

huu*_*duy 14

  1. 这是我简单的解决方案onPageScrolled()的方法ViewPager.OnPageChangeListener:

在此输入图像描述


小智 6

与GuilhE相同的解决方案,带有一个小修复,以避免在ViewPager中第一页(左侧没有页面)向左翻页(向右滑动)时出现误报.它只是进行额外的检查,以确定滑动是否实际上已移动.

new ViewPager.OnPageChangeListener() {

  private static final float thresholdOffset = 0.5f;
  private static final int thresholdOffsetPixels = 1;
  private boolean scrollStarted, checkDirection;

  @Override
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    if (checkDirection) {
      if (thresholdOffset > positionOffset && positionOffsetPixels > thresholdOffsetPixels) {
        Log.i(C.TAG, "going left");
      } else {
        Log.i(C.TAG, "going right");
      }
    checkDirection = false;
  }
}

  @Override
  public void onPageSelected(int position) {}

  @Override
  public void onPageScrollStateChanged(int state) {
    if (!scrollStarted && state == ViewPager.SCROLL_STATE_DRAGGING) {
      scrollStarted = true;
      checkDirection = true;
    } else {
      scrollStarted = false;
    }
  }
 });
Run Code Online (Sandbox Code Playgroud)