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