简介
SnapHelper是RecyclerView的辅助类,可用来控制在滑动结束后,RecyclerView中item的对齐方式。
SnapHelper是一个抽象类,系统内置了两个默认实现类
LinearSnapHelper:使当前Item居中显示,常用场景是横向的RecyclerView, 类似ViewPager效果,但是又可以快速滑动(滑动多页)
PagerSnapHelper:PagerSnapHelper的展示效果和LineSnapHelper是一样的,只是PagerSnapHelper 限制一次只能滑动一页,不能快速滑动。
滑动基础
RecyclerView的滚动分为滚动状态和Fling这两类,主要应对的是OnScrollListener和OnFlingListener这两个回调接⼝;
对应
private void setupCallbacks() throws IllegalStateException {
if (mRecyclerView.getOnFlingListener() != null) {
throw new IllegalStateException("An instance of OnFlingListener already set.");
}
mRecyclerView.addOnScrollListener(mScrollListener);
mRecyclerView.setOnFlingListener(this);
}
private void destroyCallbacks() {
mRecyclerView.removeOnScrollListener(mScrollListener);
mRecyclerView.setOnFlingListener(null);
}
滚动状态监听
SCROLL_STATE_IDLE 滚动闲置状态,此时并没有手指滑动或动画执行
SCROLL_STATE_DRAGGING 滚动拖拽状态,由于用户触摸屏幕产生
SCROLL_STATE_SETTLING 自动滚动状态,此时手没有触摸,一般是由动画执行滚动到最终位置、包括smoothScrollTo等方法的调用
Fling操作
手指在屏幕上滑动RecyclerView然后松手,RecyclerView中的内容会顺着惯性继续往手指滑动的方向继续滚动直到停止,这个过程叫做Fling。Fling操作从手指离开屏幕瞬间被触发,在滚动停止时结束。
过程
调用attachToRecyclerView绑定到RecyclerView时来完成对齐TargetView。
当Scroll被触发时和Fling操作的