RecycleView源码学习

34 篇文章 0 订阅

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);

参考
  1. RecyclerView 之通用适配
  2. 让你明明白白的使用RecyclerView——SnapHelper详解
  3. 创建一个 RecyclerView的LayoutManager - 第一部分
  4. CardStackView
  5. 完美解决ViewPager与各种横向滑动组件(横向RecyclerView,ScrollView等)冲突问题
  6. BaseRecyclerViewAdapterHelper
  7. 如何让安卓(Android)子控件超出父控件的范围显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值