viewpager 基本完美解决方案

作者: 石头_起航 | 来源:发表于2018-06-11 16:26 被阅读119次

    这几天试了好几种的解决方案,但是我下面这种,我感觉应该是比较简单的也是比较完美的实现方式来实现无线循环,如果您有更好的的方案可以在下面留言,欢迎指错。

        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:就是代表滑动完成

    相关文章

      网友评论

        本文标题:viewpager 基本完美解决方案

        本文链接:https://www.haomeiwen.com/subject/rmdheftx.html