声明:博文未经授权一律不允转载
开门撞山:
ViewPager配套滑动回调ViewPager.OnPageChangeListener有三个方法:
void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);
void onPageSelected(int position);
void onPageScrollStateChanged(int state);
不用过多解释,是人都会用,但是有一个方法比较复杂,三个参数的onPageScrolled,每次使用都要打印着看看到底这三个参数到底是什么,有什么规律。
在这里,将这三个参数在这里做一个一目了然的阐述,以便下一次再用的时候直接上手,节省时间。
- 首先,这个方法是在手指滑动的时候不断会回调的,和move事件一样,参数1最复杂,我们放到最后讲。
- 参数2:positionOffset:
- 取值范围是[0, 1).
- 手指右滑(包括释放手指后的同一个趋势的运动),数值变化范围(1→0],越来越小,最后一次回调给你一个0。
- 手指左滑(包括释放手指后的同一个趋势的运动),数值变化范围[0→1),越来越大,但是最后一次回调也给你一个0,也就是到0.99..之后就变回0。
- 参数3:positionOffsetPixels:
- 和positionOffset套路完全一样,只是数值换成了像素,要注意手指左滑最后的从最大变回0的细节.
参数1:position,有点复杂的规则:
- 滑动的时候,一般可见的是两页,那么这个参数就是给你第一个可见的页面.
- 比如,如果当前处于第1页,前面还有第0页,后面有第2页,像这样[0,1,2…]:
- 手指右滑,那么position会一直给你0,最后一次回调给你0,因为滑动的时候可见的是0和1,滑动完成后可见的是0.
- 手指左滑,那么position会一直给你1,最后一次回调给你2,因为滑动的时候可见的是1和2,滑动完成后可见的是2.
- 比如,如果当前处于第1页,前面还有第0页,后面有第2页,像这样[0,1,2…]:
- 源码中的注释还有一段描述如下:
- “Page position+1 will be visible if positionOffset is nonzero”,综合上面描述,我们也能发现这个规律,也就是当可见positionOffset不为0的时候,position+1的页面是可见的,可能处于滑动(或者释放手指后的滑动)中。
- 滑动的时候,一般可见的是两页,那么这个参数就是给你第一个可见的页面.
Stay hungry stay foolish!
仅作知识点记录,如有疏漏,全(欢)都(迎)怪(指)你(正)。