ViewPager作为循环队列/包装我使用的是ViewPager与FragmentStatePagerAdapter让一些片段之间的导航。比方说,我有三个片段:A,B和C。ViewPager最初显示片段A,并允许您通过从右向左滑动,然后再次滑动到片段C来导航到片段B. 这允许以下导航路径:A <--> B <--> C。我想要的是能够在片段A上从左向右滑动并使ViewPager显示片段C,即它表现为循环队列并允许 ... --> C <--> A <--> B <--> C <--> A <-- ...我不希望片段在其他位置重复(即最终有三个以上的实例)。使用ViewPager可以实现这种包装功能吗?
3 回答
HUX布斯
TA贡献1876条经验 获得超6个赞
这是一个没有虚假页面的解决方案,就像一个魅力:
public class CircularViewPagerHandler implements ViewPager.OnPageChangeListener { private ViewPager mViewPager; private int mCurrentPosition; private int mScrollState; public CircularViewPagerHandler(final ViewPager viewPager) { mViewPager = viewPager; } @Override public void onPageSelected(final int position) { mCurrentPosition = position; } @Override public void onPageScrollStateChanged(final int state) { handleScrollState(state); mScrollState = state; } private void handleScrollState(final int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { setNextItemIfNeeded(); } } private void setNextItemIfNeeded() { if (!isScrollStateSettling()) { handleSetNextItem(); } } private boolean isScrollStateSettling() { return mScrollState == ViewPager.SCROLL_STATE_SETTLING; } private void handleSetNextItem() { final int lastPosition = mViewPager.getAdapter().getCount() - 1; if(mCurrentPosition == 0) { mViewPager.setCurrentItem(lastPosition, false); } else if(mCurrentPosition == lastPosition) { mViewPager.setCurrentItem(0, false); } } @Override public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) { }}
你只需要将它设置为你的ViewPager作为onPageChangeListener,就是这样:( ** 现在不推荐 **检查编辑说明)
viewPager.setOnPageChangeListener(new CircularViewPagerHandler(viewPager));
为了避免在ViewPager的“结尾”出现这种蓝色光芒,您应该将此行应用于放置ViewPager的xml:
android:overScrollMode="never"
我们改进了上面的解决方案并在github上创建了一个小库。随意查看:)
编辑::根据@Bhavana注释,只需使用addOnPageChangeListener而不是setOnPageChangeListener,因为不推荐使用以后版本。
viewPager.addOnPageChangeListener(new CircularViewPagerHandler(viewPager));
- 3 回答
- 0 关注
- 364 浏览
添加回答
举报
0/150
提交
取消