ViewPager作為循環(huán)隊列/包裝我使用的是ViewPager與FragmentStatePagerAdapter讓一些片段之間的導航。比方說,我有三個片段:A,B和C。ViewPager最初顯示片段A,并允許您通過從右向左滑動,然后再次滑動到片段C來導航到片段B. 這允許以下導航路徑:A <--> B <--> C。我想要的是能夠在片段A上從左向右滑動并使ViewPager顯示片段C,即它表現(xiàn)為循環(huán)隊列并允許 ... --> C <--> A <--> B <--> C <--> A <-- ...我不希望片段在其他位置重復(即最終有三個以上的實例)。使用ViewPager可以實現(xiàn)這種包裝功能嗎?
3 回答

HUX布斯
TA貢獻1876條經(jīng)驗 獲得超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,就是這樣:( ** 現(xiàn)在不推薦 **檢查編輯說明)
viewPager.setOnPageChangeListener(new CircularViewPagerHandler(viewPager));
為了避免在ViewPager的“結尾”出現(xiàn)這種藍色光芒,您應該將此行應用于放置ViewPager的xml:
android:overScrollMode="never"
我們改進了上面的解決方案并在github上創(chuàng)建了一個小庫。隨意查看:)
編輯::根據(jù)@Bhavana注釋,只需使用addOnPageChangeListener而不是setOnPageChangeListener,因為不推薦使用以后版本。
viewPager.addOnPageChangeListener(new CircularViewPagerHandler(viewPager));
- 3 回答
- 0 關注
- 381 瀏覽
添加回答
舉報
0/150
提交
取消