【Android】ViewPager实现无限循环滑动思想

ViewPager本身并不能实现循环滑动。网上查找到两种方法:

1. 将ViewPager设置一个足够大的整数Integer.MAX_VALUE,但这并不是真正的无限循环;

2. 在实际展现的ViewPager前后分别插入一个item,真正实现无限循环滑动。

1、关于ViewPager.setOffscreenPageLimit方法

(1)大家都知道,viewpager是默认预加载下一页的界面的。viewpager提供了一个设置预加载页面数量的方法,那就是setOffscreenPageLimit()。默认不设置数量的情况下预加载下一页。设置0和1是同样的效果。

//DEFAULT_OFFSCREEN_PAGES = 1
public void setOffscreenPageLimit(int limit) {
    if (limit < DEFAULT_OFFSCREEN_PAGES) {
        limit = DEFAULT_OFFSCREEN_PAGES;
    }
    if (limit != mOffscreenPageLimit) {
        mOffscreenPageLimit = limit;
        populate();
    }
}

(2)例如,ViewPager现在有5个fragment。设置setOffscreenPageLimit(1),进去之后默认fragment1和fragment2会被创建。滑到第二个界面,fragment3会被创建。滑到第三个界面,fragment1会被销毁,fragment4会被创建。

 

2、关于ViewPager.OnPageChangeListener三个接口方法

(1)onPageScrollStateChanged(int state)

//Called when the scroll state changes

state取值:
ViewPager#SCROLL_STATE_IDLE//0闲置状态
ViewPager#SCROLL_STATE_DRAGGING//1正在滑动
ViewPager#SCROLL_STATE_SETTLING//2

(2)onPageScrolled(int position, float positionOffset, int positionOffsetPixels)

//滑动过程中调用若干次

(3)onPageSelected(int position)

//页面跳转完成之后调用

总结:

这三个方法的调用顺序:onPageScrollStateChanged(1),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2),然后立即执行一次onPageSelected,接着执行多次onPageScrolled,最后执行一次onPageScrollStateChanged(0)

 

实现细节可以参考以下文档:

(1)写一个很大的count,比较low的方法。

https://www.jb51.net/article/137055.htm

(2)ViewPager前后分别插入一个item。

https://blog.csdn.net/u011451706/article/details/53152152

(3)ViewPager.setOffscreenPageLimit实践。

https://blog.csdn.net/xiaolaohuqwer/article/details/75670294

 


版权声明:本文为ican87原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。