如何立即查看 ViewPager 的方向?

How to check direction of ViewPager immediatelly?

我正在使用 ViewPager。每当页面移动时,我想检查当前 ViewPager 页面的方向。它可以由用户(滑动/单击选项卡布局中的另一个选项卡)或由 ViewPager 本身移动(用户未完成滑动并且页面正在移回空闲位置。

谢谢

我尝试了很多不同的解决方案(f.e。使用 PageTransformer 计算视图方向等。)但它们通常效果不佳。如果您在 first/last 选项卡上,您可能会走错方向。如果页面是由 viewpager 本身而不是用户滑动移动的,您可能无法获得任何方向...

最后有一个非常简单的解决方案,绝对是 "bug-proof" :) .

new ViewPager.OnPageChangeListener() {

                private float lastPositionAndOffsetSum = 0f;

                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                    if (position + positionOffset == lastPositionAndOffsetSum) {
                       //IT'S NOT MOVING
                    } else if (position + positionOffset > lastPositionAndOffsetSum) {
                       //RIGHT TO LEFT
                    } else {
                       //LEFT TO RIGTH
                    }
                    lastPositionAndOffsetSum = position + positionOffset                    }

                @Override
                public void onPageSelected(int position) {}

                @Override
                public void onPageScrollStateChanged(int state) {}
            });

如果您有任何问题,请告诉我。

将 setOnPageChangeListener 设置为您的 ViewPager。

viewpager.addOnPageChangeListener(
            new OnPageChangeListener(){
@Override
public void onPageSelected(int arg0) {
    if(lastPage>arg0)
      {//User Move to left}
    else(lastPage<arg0) 
     {//User Move to right}
      lastPage=arg0
}
});

查看ViewPager.OnPageChangeListener的onPageSelected(int position)方法。该位置给出了新选择的页面的索引。如果您跟踪最后一个页面索引,那么您可以将它与当前页面索引的位置进行比较,您可以获得 viewpager 的 left/right 方向。