盒子
盒子
文章目录
  1. 开门撞山:

[饼干]ViewPager配套滑动回调onPageScrolled

声明:博文未经授权一律不允转载

开门撞山:

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.
    • 源码中的注释还有一段描述如下:
      • “Page position+1 will be visible if positionOffset is nonzero”,综合上面描述,我们也能发现这个规律,也就是当可见positionOffset不为0的时候,position+1的页面是可见的,可能处于滑动(或者释放手指后的滑动)中。
  • Stay hungry stay foolish!

仅作知识点记录,如有疏漏,全(欢)都(迎)怪(指)你(正)。

支持一下
扫一扫,支持Halohoop