这几天试了好几种的解决方案,但是我下面这种,我感觉应该是比较简单的也是比较完美的实现方式来实现无线循环,如果您有更好的的方案可以在下面留言,欢迎指错。
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == 0) {//获取当前页面的状态 0代表滑动结束
int currentItem = mViewPager.getCurrentItem();//获取当前页面的数字
if (currentItem == mFragments.size() - 1) {//判断当前页面是否是最后一个页面
mViewPager.setCurrentItem(0, false);//是最后一个页面并且滑动结束就跳转到第一个页面 false代表取消翻页动画
s = 0;
}
}
}
});
上面是实现无线循环的关键代码,在配合定时器使用就可以做出来无线循环的banner ,这个是无限右滑,左滑原理相同。
下边说一下addOnPageChangeListener方法,以及内部方法参数说明。首先说明一下如果你百度viewpager无限循环,你看到的应该是setOnPageChangeListener这个监听方法,但是你照着写上的话会告诉你这个方法过时了,替代他的那就是addOnPageChangeListener这个方法,下边说下里面参数的含义;
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
position:当前页面position
positionOffset:当前页面偏移百分比(0是未偏移,理论上来说1是页面切换但是日志中未打印1的数字)
开始的时候.png
第一和第二页面切换的临界点,偏移百分比没有1.png
public void onPageSelected(int position) {
Log.e("======>", " position:" + position);
}
position:当前页面的position(刚进入程序不会执行滑动后才会执行)
log记录.png
我们可以看到刚开始并没有记录0,而是滑动后记录的1——》2
public void onPageScrollStateChanged(int state) {
Log.e("======>", " state:" + state);
}
state代表滑动状态主要有三个,来看下源码中这三个状态
三种状态.png
状态码代表的数字.png
下边看看log记录的信息
log记录.png
正常滑动就是1——》2——》0的顺序执行
1:代表当时正在滑动(必须的滑动才会出现)
2:代表手指离开屏幕,(你可以测试一下如果手指不离开屏幕2不会出现这个不好,魅族测试两个手指滑动(一手按屏幕,一手滑动,两个手指离开)不会出现2 这个状态原因不明,单手操作就会出现2)
0:就是代表滑动完成
网友评论