当前位置:网站首页>SnapHelper翻页效果两行代码带你实现不一样的RecyclerView
SnapHelper翻页效果两行代码带你实现不一样的RecyclerView
2022-08-03 13:41:00 【码农xo】
如果我们正常使用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);
只需要两行代码就可以实现想要的效果。
边栏推荐
猜你喜欢
【框架】idea找不到xxx依赖项怎么办
Hanyuan Hi-Tech G8032 standard ERPS ring network switch Gigabit 4 optical 10 electrical industrial Ethernet switch ring network + WEB management + SNMP VLAN planning
TensorFlow离线安装包
农产品企业如何进行全网营销?
DAY19(DAY20、DAY21拓展):SQL 注入
PyTorch构建分类网络模型(Mnist数据集,全连接神经网络)
网易互娱在秒级监控、服务限流、AIOps落地上的运维升级实践
项目管理:PMP和IPMP哪个更值得考?两个证书的区别在于哪里?
【OpenCV】 书本视图矫正 + 广告屏幕切换 透视变换图像处理
PyTorch构建神经网络预测气温(数据集对比,CPU与GPU对比)
随机推荐
MySQL数据表操作实战
将移位距离和假设外推到非二值化问题
PyTorch builds a neural network to predict temperature (dataset comparison, CPU vs GPU comparison)
爱可可AI前沿推介(8.3)
【OpenCV】 书本视图矫正 + 广告屏幕切换 透视变换图像处理
Golang channel channel
Heaps
W11或W10系统如何进行休眠?
[Deep Learning] Overview of Efficient and Lightweight Semantic Segmentation
Redis 6 的多线程
Golang 互斥锁
[web penetration] detailed explanation of CSRF vulnerability
js单线程及事件循环、宏任务和微任务
Golang 接口 interface
【web渗透】CSRF漏洞详细讲解
升级农企业务运营建设,智慧供应链管理平台打造“共赢生态链”
[OpenCV] Cascade classifier training model
4年工作经验,多线程间的5种通信方式都说不出来,你信吗?
An animation basic element movie clip effect
typedef关键字的用法