基本用法
registerOnPageChangeCallback 需要传入 OnPageChangeCallback 类,该类为抽象类, 有三个待重写的方法,可以根据实际情况对任意方法进行重写,具体使用如下:
viewpager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
}
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
}
override fun onPageScrollStateChanged(state: Int) {
super.onPageScrollStateChanged(state)
}
})
方法使用详解
onPageSelected:跳转到一个新页面时会调用该方法,不关心动画是否已经结束
- @param
position: Int为新页面的 index
onPageScrolled:只要页面在滑动就会被调用,用户滑动和通过代码滑动都会调用到该方法
- @param
position: Int:往右滑动时,是下一个界面的 index。往左滑动时,是上一个界面的 index(具体细节可以查看 gif)。 - @param
positionOffset: Float:相对当前position的位移偏移量,范围在 [0, 1) - @param
positionOffsetPixels: Int:相对当前position的像素偏移量
onPageScrollStateChanged:当 ViewPager 状态发生变化时,会回调该方法。
-
@param
state:viewPager 的新状态 -
回调的状态包括:
SCROLL_STATE_IDLE(初始状态和停止状态)、SCROLL_STATE_DRAGGING(用户按下屏幕滑动中的状态)、SCROLL_STATE_SETTLING(松手之后,到 viewPager 真正停下来的这个过程)
方法使用时的注意事项
onPageSelected:用户选择新页面,松手时就会调用。可以使用这个方法来执行一些自定义的操作,例如在页面之间切换时更新UI元素、加载新数据、更新 viewPager 标题等
onPageScrolled:只要用户滚动 viewPager 时,就会被调用。position 为你即将要到达的位置,停留在某个页面时 position 为 0。可以使用这些参数来执行一些自定义的UI操作,例如根据滚动位置创建视觉差效果、更新页面指示器等
onPageScrollStateChanged:在 viewPager 运动状态发生变化时,该方法会被调用。
滑动的时候,状态为 SCROLL_STATE_DRAGGING(1);松手之后,vp 还在运动,状态为SCROLL_STATE_SETTLING(2);停下来之后,状态为 SCROLL_STATE_IDLE(0)。如果此时需要获取到当前的 item 去做相应的操作,可以调用 getCurrentItem 方法。可以使用这个方法来执行一些自定义的操作,例如在开始拖动页面时暂停一些动画、在页面滚动停止时恢复一些动画、对当前 ViewPager 进行截图等。