ViewPager2.PageTransformer 效果

import android.view.View
import androidx.viewpager2.widget.ViewPager2
import com.youth.banner.transformer.BasePageTransformer

class PartialShowTransformer : ViewPager2.PageTransformer {
    private val DEFAULT_MIN_SCALE: Float = 0.90f
    private val mMinScale = DEFAULT_MIN_SCALE
    override fun transformPage(view: View, position: Float) {
        val pageWidth: Int = view.getWidth()
        val pageHeight: Int = view.getHeight()
        // 计算缩放后的高度差,用于底部对齐
        val heightDiff = pageHeight * (1 - mMinScale)
        view.pivotY = (pageHeight / 2).toFloat()
        view.pivotX = (pageWidth / 2).toFloat()
        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.scaleX = mMinScale
            view.scaleY = mMinScale
            view.pivotX = pageWidth.toFloat()
        } else if (position <= 1) { // [-1,1]
            // Modify the default slide transition to shrink the page as well
            if (position < 0)  //1-2:1[0,-1] ;2-1:1[-1,0]
            {
                val scaleFactor: Float = (1 + position) * (1 - mMinScale) + mMinScale
                view.scaleX = scaleFactor
                view.scaleY = scaleFactor

                view.pivotX =
                    pageWidth * (BasePageTransformer.DEFAULT_CENTER + (BasePageTransformer.DEFAULT_CENTER * -position))
            } else  //1-2:2[1,0] ;2-1:2[0,1]
            {
                val scaleFactor: Float = (1 - position) * (1 - mMinScale) + mMinScale
                view.scaleX = scaleFactor
                view.scaleY = scaleFactor
                view.pivotX = pageWidth * ((1 - position) * BasePageTransformer.DEFAULT_CENTER)
            }
        } else { // (1,+Infinity]
            view.pivotX = 0f
            view.scaleX = mMinScale
            view.scaleY = mMinScale
        }
           // 高度差 只要这行代码实现
        view.translationY = (heightDiff / 2) * position
    }
}
//间距
MarginPageTransformer(16f.dp.toInt())
// 一屏显示2个page
val mViewPager2 = holder.mBind.banner.viewPager2
                val recyclerView = holder.mBind.banner.viewPager2.getChildAt(0) as RecyclerView
                recyclerView.setPadding(
                    0,
                    mViewPager2.paddingTop,
                    137f.dp.toInt(),
                    mViewPager2.paddingBottom
                )
                recyclerView.clipToPadding = false

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值