小小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 我该在哪儿调用...
未完待续。。。