ViewPager无限循环

来源:互联网 发布:哥伦比亚羽绒服 知乎 编辑:程序博客网 时间:2024/04/28 20:19

    网上搜了很多文章,思路是假设要显示三张图片A B C,在list中按索引从小到大存放为C A B C A,初始化时viewPager.setCurrentItem(1),显示实际需要播放图片的第一张A,以后滑动时,如果从1滑动到0,就setCurrentItem(3),因为第0张存放的是C,滑动到0就跳转到3也是C,所以看不出变化OnPageChangeListener中。

    起初我是按照网上搜到的其他文章中,写到OnPageChangeListener的onPageScrolled()中,内容如下

pageChangeListener = new ViewPager.OnPageChangeListener() {    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {        int count = imageViewList.size();        if (position == 0) {            viewPager.setCurrentItem(count - 2, false);        } else if (position == count - 1) {            viewPager.setCurrentItem(1, false);        }    }    @Override    public void onPageSelected(final int position) {    }    @Override    public void onPageScrollStateChanged(int state) {    }};
  
    这样手指向左滑动时,从3->4,运行onPageScrolled中的逻辑,跳转到1确实没问题,但是从1->0时按onPageScrolled中的逻辑本应该跳转到3就结束,不知道为什么又触发了一次onPageChangeListener,跳转到3之后又向前跳转了一页,跳转到2了。后来修改了逻辑,把这部分跳转的逻辑写到onPageSelected中,如下所示
pageChangeListener = new ViewPager.OnPageChangeListener() {    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    @Override    public void onPageSelected(final int position) {        final int count = imageViewList.size();        if (position == 0 || position == count - 1) {            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    viewPager.setCurrentItem(Math.abs(count - position - 2), false);                }            }, 200);        }    }    @Override    public void onPageScrollStateChanged(int state) {    }};
当position=0或4时,如果立刻setCurrentItem跳转,会变成明显的一闪而过,而不是滑动效果,这里通过handler.postDelayed延迟跳转,肉眼已经看不出有不一样的滑动效果了。
http://blog.csdn.net/lmj623565791/article/details/40411921
这里还有ViewPager的页面切换效果,试了一下挺有意思的,基本就是自己写一个Transform类实现PageTransformer接口,然后viewPager.setPageTransformer(new Transform())就好了

0 0
原创粉丝点击