ViewPager.OnPageChangeListener有坑

小小OnPageChangeListener竟然隐藏大烦恼.

public interface OnPageChangeListener {
        void onPageScrolled(int var1, float var2, @Px int var3);

        void onPageSelected(int var1);

        void onPageScrollStateChanged(int var1);
    }

平常使用页面切换,顶多使用到了其中一个方法,但是最近做一个看起来很简单的需求时,竟然出现各种异常.

 需求:在viewpager页面切换时,需要让背景随着滑动距离渐变,这个需求第一反应是,计算滑动方向,算出目标页面对应的背景图(每一个页面对应一个图片),然后根据滑动距离在半部分渐渐隐藏当前背景,后半部分,渐渐显示下一个张背景.

  第一个问题来了::如何获取当前页面的角标,看起来很简单,通过以下代码获取

ViewPager.getCurrentItem()

但是因为需要获取当页面脚标,所以这个方法在不同时间获取,值也会不一样,这样的话就需要我们了解一下这个回调接口的三个方法运行顺序:

        例如,从第一页滑动到第二页运行顺序

1、onPageScrollStateChanged(ViewPager.SCROLL_STATE_DRAGGING,view);
2、onPageScrolled(0,0.06,positionOffsetPixels,view);
3、...上面方法执行N次,直到手离开屏幕,第二个参数从大于0,但是无限接近0到1
4、onPageScrollStateChanged(ViewPager.SCROLL_STATE_SETTLING,view);
5、onPageSelected(1,view);
6、onPageScrolled(0,0.4,positionOffsetPixels,view);
7、...上面方法执行N次,直到第二个参数为0时,表示当前方法不再调用
8、onPageScrollStateChanged(ViewPager.SCROLL_STATE_IDLE,view);

        从开始到结束,大概分为以上几步,您猜一下ViewPager.getCurrentItem 我该在哪儿调用...

未完待续。。。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值