在ViewPager2的 PageTransformer的定制过程中,会出现各种的疑问.其中比较困扰我的就是 PageTransformer的各个page与position是如何对应的呢?
首先声明一点,本文的position指的是ViewPager2.PageTransformer的回调方法transformPage(View page, float position)中的postion,和我们所说的集合或者RecyclerView的item的position无关!
一、 最普通的列表, 如左图所示: Position是从0,1,2...位按顺序排序到 list.size-1位.
二、卡片堆叠排列的列表, 如右图所示: 满足以下特征:
- 卡片的初始状态和普通列表一致,最顶层的position = 0,其余位置依次顺序排列.
2.向上滑动之后,之前position = 0 的page 的会改变成 position = -1,其余的page的postion都会改变成 旧position - 1. 滑动之后显示在界面顶层的position始终为0.
这是transformPage(View page, float position)回调方法的规则: 当前的position始终为0,被划上去的page的position会变成负数,而在当前的页下面的page的position也会比初始状态相应减少N个position.这取决于在初始状态下,当前的页的初始position为N.
所以我们在计算缩放和位移动画时,要知道自己修改的是哪一个position.结合上图弄清position变化的原理很重要.