Closed twirain closed 2 years ago
场景是这样的,我们有一个一屏三页的效果,中间的彩色显示,两边黑白显示,当banner滑动时,我需要改变中间banner的颜色显示。因为ViewPager#OnPageCallback获取的position是被修正过的,导致我无法去刷新中间的banner,现在我是通过反射来去处理的:
ViewPager#OnPageCallback
position
val originCb = ReflectUtils.reflect(binding.bannerSkin).field("mOnPageChangeCallback") .get<ViewPager2.OnPageChangeCallback>() val vp = ReflectUtils.reflect(binding.bannerSkin).field("mViewPager").get<ViewPager2>() vp.unregisterOnPageChangeCallback(originCb) val callback = object : ViewPager2.OnPageChangeCallback() { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { originCb.onPageScrolled(position, positionOffset, positionOffsetPixels) } override fun onPageSelected(position: Int) { originCb.onPageSelected(position) binding.bannerSkin.adapter.notifyItemChanged(position) } override fun onPageScrollStateChanged(state: Int) { originCb.onPageScrollStateChanged(state) } } vp.registerOnPageChangeCallback(callback)
我也看到了类似的需求在issues47中提及
场景是这样的,我们有一个一屏三页的效果,中间的彩色显示,两边黑白显示,当banner滑动时,我需要改变中间banner的颜色显示。因为
ViewPager#OnPageCallback
获取的position
是被修正过的,导致我无法去刷新中间的banner,现在我是通过反射来去处理的:我也看到了类似的需求在issues47中提及