细谈RecyclerView:(三)两行代码带你实现不一样的RecyclerView

本文详细介绍了如何使用SnapHelper为RecyclerView实现特定的滑动效果,包括让Item在滑动停止时居中对齐以及类似ViewPager的逐页滑动。SnapHelper是一个用于RecyclerView snapping的支持类,通过其子类LinearSnapHelper和PagerSnapHelper可以轻松达到所需效果,只需少量代码即可实现。同时,文章深入解析了SnapHelper的工作原理,包括源码分析,帮助理解其内部机制。
摘要由CSDN通过智能技术生成

正常滑动效果

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

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

那这个时候我们怎么办呢?

我们先来看看效果。

LinearSnapHelper效果

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

PagerSnapHelper效果

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

SnapHelper

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

SnapHelper的作用是什么呢?

Class intended to support snapping for a RecyclerView.

SnapHelper tries to handle fling as well but for this to work
properly, the RecyclerView.LayoutManager must implement the
RecyclerView.SmoothScroller.ScrollVectorProvider interface or you
should override onFling(int, int) and handle fling manually.

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效果。它们俩的使用也非常简单。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值