自定义Android View Pager动画实现求助
实现目标页面切换动画的PageTransformer方案
根据你提供的动画效果,这里给出一个自定义的PageTransformer实现,通过缩放、透明度和位移组合来匹配需求:
自定义Transformer代码(Kotlin)
class ScaleFadeSlideTransformer : ViewPager2.PageTransformer { // 可调整的动画参数 private val minScale = 0.85f // 页面最小缩放比例 private val minAlpha = 0.0f // 页面最小透明度 private val translateXFactor = 0.1f // 页面横向位移比例 override fun transformPage(page: View, position: Float) { page.run { val pageWidth = width when { // 页面完全处于屏幕左侧外 position < -1 -> { alpha = minAlpha scaleX = minScale scaleY = minScale translationX = -pageWidth * translateXFactor } // 当前页面向左滑动(position从0到-1) position <= 0 -> { alpha = 1 + position val scale = minScale + (1 - minScale) * (1 - Math.abs(position)) scaleX = scale scaleY = scale translationX = pageWidth * translateXFactor * position } // 右侧页面滑入屏幕(position从1到0) position <= 1 -> { alpha = 1 - position val scale = minScale + (1 - minScale) * (1 - position) scaleX = scale scaleY = scale translationX = pageWidth * translateXFactor * position } // 页面完全处于屏幕右侧外 else -> { alpha = minAlpha scaleX = minScale scaleY = minScale translationX = pageWidth * translateXFactor } } } } }
使用方式
将这个Transformer设置给你的ViewPager2:
viewPager2.setPageTransformer(ScaleFadeSlideTransformer())
如果使用的是旧版ViewPager,只需把实现接口换成androidx.viewpager.widget.PageTransformer,逻辑完全一致。
参数调整说明
- 修改
minScale可以调整页面的最小缩放程度,数值越小页面缩得越厉害 - 修改
minAlpha可以调整页面滑出时的透明度下限,设为0就是完全透明 - 修改
translateXFactor可以调整页面横向位移的幅度,数值越大位移越明显
你可以根据演示动画的细节微调这些参数,直到效果完全匹配。
内容的提问来源于stack exchange,提问作者Prashant Kumar
相关产品推荐
相关产品推荐

