当前位置:网站首页>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);
只需要两行代码就可以实现想要的效果。
边栏推荐
- go map转struct【mapstructure库】
- Forrester:行业云帮助中国企业更快适应未来的发展
- 工作流自动化,低代码是解决关键
- Golang GMP 原理
- 投资75亿卢比!印度宣布建首座存储芯片组装和封测工厂,将于12月量产
- 不卷不pua,早9晚6,这个招聘深得我心
- The Chinese Embassy in Nigeria issued an emergency safety warning for the area near Zuma Rock in Abuja
- 优思学院|2022年获美质协ASQ和ILSSI奖项的《精益六西格玛的十条戒律》
- Insertion or Heap Sort
- 位级运算之计算整数位级表示奇偶性
猜你喜欢
![[Deep Learning] Overview of Efficient and Lightweight Semantic Segmentation](/img/d8/a367c26b51d9dbaf53bf4fe2a13917.png)
[Deep Learning] Overview of Efficient and Lightweight Semantic Segmentation

硬件业务收入下滑,为了赚钱,苹果暧昧对待流氓软件和增加广告了

函数在结构体中的应用练习

厨卫电器行业数字化集采管理系统:优化产业供应结构,实现采购业务流程集中管控

保健用品行业B2B电子商务系统:供采交易全链路数字化,助推企业管理精细化

PyTorch构建神经网络预测气温(数据集对比,CPU与GPU对比)

MySQL【视图】

CVPR 2022 | Predicting Skeletons from Human Meshes, True Physiological Skeletons!

Nanoprobes Ni-NTA-Nanogold——用于 His 标签标记和检测

工具模板 | 用APOEM方法消除对用户行为的偏见
随机推荐
D the author: d new features
如何在 UE4 中制作一扇自动开启的大门
【二叉树】从二叉树一个节点到另一个节点每一步的方向
保健用品行业B2B电子商务系统:供采交易全链路数字化,助推企业管理精细化
滑动窗口的最大值
Golang 结构体&方法
Left index of all anagrams in leetcode/string (some permutation of s1 string is a substring of s2)
如何让history历史记录前带时间戳
【web渗透】CSRF漏洞详细讲解
leetcode/字符串中的所有变位词(s1字符串的某个排列是s2的子串)的左索引
PyTorch框架训练线性回归模型(CPU与GPU环境)
An introduction to the width tool, deformation tool and lasso tool
GBase 8c数据库集群中,怎么替换节点呢?比如设置A节点为gtm,换到B节点上。
为什么手动启动GBase 8c数据库中GTM节点
半导体制造业回流美国?宏碁创始人施振荣:违反垂直分工大趋势
“芯片法案”通过后,美光承诺在美国扩产
The Chinese Embassy in Nigeria issued an emergency safety warning for the area near Zuma Rock in Abuja
Relia Tech活性VEGFR重组蛋白丨小鼠 VEGF120实例展示
微服务的快速开始(nacos)最全快速配置图解
Petri网-2、有向网