在循环ViewPager中切换第一个和最后一个

时间:2016-01-05 13:43:34

标签: android android-viewpager slide smoothing

我正在使用圆形ViewPager的流行解决方案,即在前面和后面再添加两个视图。但它在第一个和最后一个之间没有顺利滑动。例如,当我们从最后一个滑动到第一个时,一旦我们的手指离开屏幕,滚动将被削减,第一张图片立即显示。
我发现的原因是回调方法" onPageSelected"在界面" OnPageChangeListener"在滚动完成之前调用。这是不可接受的,为什么新页面在旧页面消失之前被选中? 而现在,我无法解决这个问题。希望你的帮助!
以下是我的代码片段:

@Override
public void onPageSelected(int position) {
    if (position == views.size() - 1) {
        viewPager.setCurrentItem(1, false);
    }
    else if (position == 0) {
        viewPager.setCurrentItem(views.size() - 2, false);
    }
}

其他代码可能是不必要的,如果你遇到过这类问题,你就会明白它 第一次问我一个问题。如有不妥之处,请告诉我,谢谢!

1 个答案:

答案 0 :(得分:0)

我受到@tobi_b answer的启发。我的解决方案是什么时候从假的最后跳到真正的第一个,等到最后滚动完成。这是我的代码,它很简单,

private final class MyPageChangeListener implements OnPageChangeListener {

    private int currentPosition;

    @Override
    public void onPageScrollStateChanged(int state) {
        if (state == ViewPager.SCROLL_STATE_IDLE) {
            if (currentPosition == viewPager.getAdapter().getCount() - 1) {
                viewPager.setCurrentItem(1, false);
            }
            else if (currentPosition == 0) {
                viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 2, false);
            }
        }
    }

    @Override
    public void onPageScrolled(int scrolledPosition, float percent, int pixels) {
        //empty
    }

    @Override
    public void onPageSelected(int position) {
        currentPosition = position;
    }

}

然而,这种解决方案并不完美。从最后一个到第一个快速滑动时,它有一点缺陷。如果我们在很短的时间内滑动两次,第二张幻灯片将无效。这个问题需要解决。