默认切换动画
MainActivityoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = DataBindingUtil.setContentView(this,R.layout.activity_main)binding.viewpager2.adapter = ViewPagerAdapter(this)//binding.viewpager2.setPageTransformer(ViewPagerOverlay())}
Adapter
package im.zebra.myviewpager2import androidx.fragment.app.Fragmentimport androidx.fragment.app.FragmentActivityimport androidx.viewpager2.adapter.FragmentStateAdapterclass ViewPagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {private val list = arrayOf("微信","通讯录","发现","我的")override fun getItemCount(): Int = list.sizeoverride fun createFragment(position: Int): Fragment =BlankFragment.newInstance(list[position], "")}
自定义动画(缩放)
binding.viewpager2.setPageTransformer(ViewPagerScale())package im.zebra.myviewpager2import android.view.Viewimport androidx.viewpager2.widget.ViewPager2import kotlin.math.absprivate const val MIN_SCALE = 0.75fclass ViewPagerScale : ViewPager2.PageTransformer {override fun transformPage(view: View, position: Float) {val pageWidth = view.widthwhen {position < -1 -> {// [-Infinity,-1)// This page is way off-screen to the left.view.alpha = 0f}position <= 0 -> {// [-1,0]// Use the default slide transition when moving to the left pageview.alpha = 1Fview.translationX = 0fview.scaleX = 1fview.scaleY = 1f}position <= 1 -> {// (0,1]// Fade the page out.view.alpha = 1 - position// Counteract the default slide transitionview.translationX = pageWidth * -position// Scale the page down (between MIN_SCALE and 1)val scaleFactor: Float = (MIN_SCALE+ (1 - MIN_SCALE) * (1 - abs(position)))view.scaleX = scaleFactorview.scaleY = scaleFactor}else -> {// (1,+Infinity]// This page is way off-screen to the right.view.alpha = 0f}}}}
自定义动画(叠加)
binding.viewpager2.setPageTransformer(ViewPagerOverlay())package im.zebra.myviewpager2import android.view.Viewimport androidx.viewpager2.widget.ViewPager2import kotlin.math.absprivate const val MIN_SCALE = 1fclass ViewPagerOverlay : ViewPager2.PageTransformer {override fun transformPage(view: View, position: Float) {val pageWidth = view.widthwhen {position < -1 -> {// [-Infinity,-1)// This page is way off-screen to the left.view.alpha = 0f}position <= 0 -> {// [-1,0]// Use the default slide transition when moving to the left pageview.alpha = 1Fview.translationX = 0fview.scaleX = 1fview.scaleY = 1f}position <= 1 -> {// (0,1]// Fade the page out.view.alpha = 1 - position// Counteract the default slide transitionview.translationX = pageWidth * -position// Scale the page down (between MIN_SCALE and 1)val scaleFactor: Float = (MIN_SCALE+ (1 - MIN_SCALE) * (1 - abs(position)))view.scaleX = scaleFactorview.scaleY = scaleFactor}else -> {// (1,+Infinity]// This page is way off-screen to the right.view.alpha = 0f}}}}