ViewPager无限循环

    网上搜了很多文章,思路是假设要显示三张图片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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值