How to know viewpager is scroll left or right?

前端 未结 13 1926
梦谈多话
梦谈多话 2020-12-13 06:18

I am using ViewPager (support library). I want to know every time the ViewPager change the visible page, it is scrolling left or right.

Please give me a solution. An

13条回答
  •  庸人自扰
    2020-12-13 07:17

    Same solution as GuilhE with a minor fix to avoid getting false positives when paging left (swiping right) on the first page(no more pages to the left) in the ViewPager. It simply does an additional check to see if the swipe has actually moved at all.

    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;
        }
      }
     });
    

提交回复
热议问题