Android 框架 RecycleView 源码学习
SnapHelper
PagerSnapHelper
Fling操作
PagerSnapHelper
:可以使RecyclerView像ViewPager一样的效果,一次只能滑一页,而且居中显示
Fling操作
:手指在屏幕上滑动RecyclerView然后松手,RecyclerView中的内容会顺着惯性
继续往手指滑动的方向继续滚动直到停止,这个过程叫做Fling
。Fling操作从手指离开屏幕瞬间被触发
,在滚动停止时结束
SnapHelper是一个抽象类,它有三个抽象方法:
// 1. 该方法会根据触发Fling操作的速率(参数velocityX和参数velocityY)来找到RecyclerView需要滚动到哪个位置
// 该位置对应的 ItemView 就是那个需要进行对齐的列表项,我们把这个位置称为targetSnapPosition
// 对应的View称为targetSnapView。
// 如果找不到targetSnapPosition,就返回RecyclerView.NO_POSITION
public abstract int findTargetSnapPosition(LayoutManager layoutManager, int velocityX, int velocityY)
// 2. 该方法会找到当前layoutManager上最接近对齐位置的那个view,该view称为SanpView,对应的position称为SnapPosition。如果返回null,就表示没有需要对齐的View,也就不会做滚动对齐调整
public abstract View findSnapView(LayoutManager layoutManager)
// 3. 这个方法会计算第二个参数对应的ItemView当前的坐标与需要对齐的坐标之间的距离。该方法返回一个大小为2的int数组,分别对应x轴和y轴方向上的距离
public abstract int[] calculateDistanceToFinalSnap(@NonNull LayoutManager layoutManager, @NonNull View targetView);