ViewPager无限循环

本文介绍如何使用ViewPager实现图片无限循环滑动效果,解决了滑动过程中出现的跳转逻辑问题,并分享了页面切换的自定义效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    网上搜了很多文章,思路是假设要显示三张图片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.youkuaiyun.com/lmj623565791/article/details/40411921
这里还有ViewPager的页面切换效果,试了一下挺有意思的,基本就是自己写一个Transform类实现PageTransformer接口,然后viewPager.setPageTransformer(new Transform())就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值