ViewPager2 registerOnPageChangeCallback 方法详解

2,213 阅读2分钟

基本用法

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 标题等

onPageSelected

onPageScrolled:只要用户滚动 viewPager 时,就会被调用。position 为你即将要到达的位置,停留在某个页面时 position 为 0。可以使用这些参数来执行一些自定义的UI操作,例如根据滚动位置创建视觉差效果、更新页面指示器等

onPageScrolled

onPageScrollStateChanged:在 viewPager 运动状态发生变化时,该方法会被调用。

滑动的时候,状态为 SCROLL_STATE_DRAGGING(1);松手之后,vp 还在运动,状态为SCROLL_STATE_SETTLING(2);停下来之后,状态为 SCROLL_STATE_IDLE(0)。如果此时需要获取到当前的 item 去做相应的操作,可以调用 getCurrentItem 方法。可以使用这个方法来执行一些自定义的操作,例如在开始拖动页面时暂停一些动画、在页面滚动停止时恢复一些动画、对当前 ViewPager 进行截图等。

onPageScrollStateChanged

Reference

ViewPager 2 使用讲解

chatGPT