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