高级UIrecycleviewAndroidUI

RecyclerView<第十二篇>:SnapHel

2019-07-15  本文已影响44人  NoBugException

RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于确定RecyclerView滚动停止后的目标位置、离目标View最近的Item以及目标View的position。

SnapHelper有三个抽象方法,分别是:

@Nullable
public abstract int[] calculateDistanceToFinalSnap(@NonNull LayoutManager var1, @NonNull View var2);

@Nullable
public abstract View findSnapView(LayoutManager var1);

public abstract int findTargetSnapPosition(LayoutManager var1, int var2, int var3);

SnapHelper抽象类最重要的三个方法就是以上三个抽象方法,其它方法可以不用看了,既然是三个最终要的方法,那么就必须了解这三个方法的作用具体是什么?

说明三个方法含义之前,还需要说明以下几个词的意思:

SnapView:当您手指迅速滑动RecyclerView后,在某个方向会有一个速度向量,使Item按照一定的速度沿着某个方向滚动,最终停止的Item为SnapView
TargetSnapPosition:目标View的位置,通过计算,SnapView会停止在预先设定好的位置。
TargetView:目标位置,TargetView是我们虚构出来的,目的是将SnapView移动到TargetView的位置。

下面讲解一下SnapHelper重要的三个抽象方法:

获取TargetSnapPosition,即计算出最终位置,var2是x轴的速度向量,var3是y轴的速度向量,根据这两个速度向量计算出最终停止的位置。

获取SnapView,即实际上滚动停止时的位置对应的Item。

计算SnapViewTargetView的距离,它的返回值是一个int数组,长度为2,第一个值代表x轴反向的距离,第二个值代表y轴方向的值。

我在RecyclerView<第十一篇>:如何自定义RecyclerView已经解释了其原理,看完这篇博客自定义SnapHelper就简单多了,继承SnapHelper之后需要重写这三个重要的抽象方法。

Andorind SDK为我们提供了LinearSnapHelperPagerSnapHelper这两个方法,他们的父类都是SnapHelper,并且这两个类都重写了以上说的三个抽象方法。

效果如下:

110.gif

效果如下:

111.gif

代码实现比较简单,就一句话:

new LinearSnapHelper().attachToRecyclerView(mRecyclerView);

new PagerSnapHelper().attachToRecyclerView(mRecyclerView);
总结

RecyclerView<第十一篇>:如何自定义RecyclerView这篇文章是为了给这篇文章做铺垫,读完之后会更好了理解怎么自定义SnapHelper,怎么去理解LinearSnapHelperPagerSnapHelper

至于LinearSnapHelperPagerSnapHelper的源码就不想费口舌了,和第十一篇的差不多。

[本章完...]

上一篇下一篇

猜你喜欢

热点阅读