美文网首页
RecyclerView的辅助类----SnapHelper

RecyclerView的辅助类----SnapHelper

作者: 程序员大耳 | 来源:发表于2021-04-08 08:50 被阅读0次

    一、SnapHelper的用处

    SnapHelper是一个RecyclerView的工具类,本身是抽象类,默认有两种实现LinearSnapHelper和PageSnapHelper。他们的主要作用是帮助ReyclerView自定义滑动方式,可以实现像ViewPage或者Gallery的滑动方式(一次翻一页或者一次翻多页),SnapHelper主要的作用是辅助操控RecyclerView的Fling过程。

    二、用法,默认实现

    1、用法简单

    SnapHelper lineSnapHelper = new LinearSnapHelper();

    lineSnapHelper.attachToRecyclerView(recyclerView);

    2、提供2个默认实现

    a、LinearSnapHelper

    效果:一次只可滑动多个Item(即支持Fling操作,惯性滑动),总是中心对齐

    b、PagerSnapHelper

    效果:一次只能滑动一个Item,总是中心对齐。

    三 、SnapHelper源码解析

    SnapHelper是一个抽象类,主要有三个抽象方法让子类实现,这里先介绍它们的作用,具体实现由子类完成。

    1、public abstract View findSnapView(LayoutManager layoutManager);

    官方描述:Override this method to provide a particular target view for snapping.

    这个方法是找到一个目标view。这个目标view是什么要看子类的实现。比如LinearSnapHelper和PagerSnapHelper是中心对齐,所以它的目标view是RecyclerView布局中最靠近中间的view。

    2、 public abstract int[] calculateDistanceToFinalSnap(LayoutManager layoutManager,View targetView);

    官方描述:Override this method to snap to a particular point within the target view or the container

    view on any axis.

    这个方法是计算出传入的targetView滑动到对其位置的距离。这个对齐位置也要看子类的实现,比如LinearSnapHelper和PagerSnapHelper是中心对齐,所以这个方法返回的是targetView到RecyclerView最中间位置的距离。

    3 、public abstract int findTargetSnapPosition(LayoutManager layoutManager, int velocityX,int velocityY);

    官方描述:Override to provide a particular adapter target position for snapping.

    这个方法是根据速度来找到target view的Position,这里的速度是监听FlingListener获得的。

    四、SnapHelper总结

    SnapHelper主要是对RecyclerView的滑动添加了监听,OnScrollListener和OnFlingListener。每次滚动结束或者Fling(惯性滑动)结束后,对Item进行对齐,而其对齐方式让子类实现。

    五、自定义SnapHelper

    根据业务需求,我们可以自定义SnapHelper,比如要做一个屏幕显示两页的Banner。

    我们可以直接继承LinearSnapHelper,然后重写calculateDistanceToFinalSnap、findSnapView两个方法,去修改对齐方式。

    此外还可以加上自动滚动的功能。

    相关文章

      网友评论

          本文标题:RecyclerView的辅助类----SnapHelper

          本文链接:https://www.haomeiwen.com/subject/jvdmkltx.html