ViewPager.OnPageChangeListener有坑

  • Post author:
  • Post category:其他


小小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 我该在哪儿调用…

未完待续。。。




版权声明:本文为JiaoJunfeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。