• SnapHelper翻页效果两行代码带你实现不一样的RecyclerView


    如果我们正常使用RecyclerView的话,那我们实现的效果就应该和下面的一样:
    当我们进行滑动的时候,RecyclerView中的Item停止的位置是取决于你滑动时的速度(Fling),可能会出现的情况是最终我们停止的位置可能位于两个item之间,当然也有可能正好位于某个item的中间。

    如果这个时候我们的产品经理提出最终停止的位置一定要在某个Item上,不能出现位于两个之间的情况;或者产品经理说滑动的时候我们要一个一个滑过去,不能一下滑好多个…

    我们先来看看效果。

    效果:滑动停止后Item的中心会被附加到RecyclerView的中心,说的直白点就是滑动停止后会显示一个完整的Item。

    效果:滑动时一个一个滑动,类似于ViewPager滑动效果。

    SnapHelper
    实现上面两种效果用到的类就是SnapHelper。

    SnapHelper的作用其实和重写onFling()的效果一样,只不过不是用监听的方式了,而是采用一个专门的类来处理。

    什么是Snapping呢?谷歌翻译的意思有卡,断,骤,折的意思。感觉好像不搭边啊。我的理解是:Snap代表的是一种状态,这种状态是处于动与静之间的过渡状态。对于RecyclerView来说就是处理滑动后停止时的状态。比如我们实现的第一个效果,当RecyclerView处于静止的时候,SnapHelper处理的方式就是把停止后的Item的中心依附于RecyclerView的中心。第二种效果SnapHelper处理的方式就是滑动后把下一个Item的中心依附于RecyclerView。

    SnapHelper是一个抽象类,继承自RecyclerView.OnFlingListener,OnFlingListener中只有一个抽象方法onFling(int velocityX, int velocityY)。onFling()方法主要用来处理fling效果。SnapHelper有两个直接子类:LinerSnapHelper , PagerSnapHelper。LinerSnapHelper 主要用来实现第一个效果的,PagerSnapHelper用来实现类似于ViewPager效果。它们俩的使用也非常简单。

    LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
    linearSnapHelper.attachToRecyclerView(mRecyclerView);

    PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
    pagerSnapHelper.attachToRecyclerView(mRecyclerView);
    只需要两行代码就可以实现想要的效果。

  • 相关阅读:
    Android12---Alarm 闹钟去除重复铃声(MTK平台)
    8.7 迁移学习域适应
    数据中台项目前期总结
    【多线程初阶】多线程案例之阻塞式队列
    三十一、java版 SpringCloud分布式微服务云架构之Java ArrayList
    排序算法模板
    Linux 线程控制 —— 线程清理 pthread_cleanup_push
    SAP 采购发票校验之 后续借记 MIRO <转载>
    xcode15出现大量Duplicate symbols
    Java根据Freemarker模板生成Word文件
  • 原文地址:https://blog.csdn.net/u012765781/article/details/126071318