0°

RecyclerView打造一个轮播图

内容预览:
  • 好了最后就剩下怎么监听RecyclerView的位置改变了(可没有像Viewpager的a...~
  • 要解决这个问题就要用到RecyclerView的另一个功能:SnapHelper~
  • 推荐阅读 知识星球这里聚集了业界内的大牛,值得各位大牛的加入! 看完...~

始发于微信公众号: 程序员小乐

分享编程技能、互联网技术、生活感悟、打造干货分享平台,将总结的技术、心得、经验分享给大家,这里不只限于技术!值得你去关注,点击上方 蓝字 快速关注。本号支持 投稿



  前言



通常Android的轮播图(俗名:Banner)都是用ViewPager实现的,但是我在实际项目运用中碰到了一些小问题,于是决定另寻思路,采用RecyclerView这个更优雅更强大的空间来实现轮播的功能,顺便复习下RecyclerView的相关知识。


  实现



一般轮播图就两个重要的部分:可以无限左右滑动的图片流和图片位置的标示点,可能更简单的连指示点都省略了。主要的难点还是在前者,因为一个轮播图要播放的图片一般也就十来张,不做任何处理直接塞到RecyclerView里面,不仅稍微滑一下就没了而且开始还不能先往左边滑,所以我们需要在设置Adapter的总数时设置成一个比较大的数(可以是Integer.MAX_VALUE),然后在设置完图片数据后把RecyclerView的当前位置转到中间的一个数(为了保证从第一张开始播放,必须是图片总数的倍数,比如10000*size),这样item回收复用的时候,我们只要取当前位置和图片数量的余数,得到真正的图片位置。听起来有点复杂,还是直接看下代码吧:


RecyclerView打造一个轮播图


至于自动滑动图片,就用Handler不断延迟发送消息就好了:


RecyclerView打造一个轮播图


好了,无限轮播解决了,接下来就是标示点了,既然无限轮播图都用RecyclerView解决了,那么标示点也用它来解决吧:


RecyclerView打造一个轮播图


其实Adapter也很简单,设置一个当前位置的标识点,然后在图片改变的时候notifyDataSetChanged()就行了。

好了最后就剩下怎么监听RecyclerView的位置改变了(可没有像Viewpager的addOnPageChangeListener那么直接的方法),没办法直接分析RecyclerView.OnScrollListener中的回调方法吧:


RecyclerView打造一个轮播图

RecyclerView打造一个轮播图


看看成果



好了解决了这些东西,再加些自定义View常用的属性,回调方法,设置的接口,轮播图就做好了,我们来看看效果:


RecyclerView打造一个轮播图

gif.gif


嗯,看着还不错,可是怎么有点怪?唉,这图片怎么滑动的这么快,而且还能停在中间,这个不是我们想要的`标准`轮播图。要解决这个问题就要用到RecyclerView的另一个功能:SnapHelper。SnapHelper旨在支持RecyclerView的对齐方式,也就是通过计算对齐RecyclerView中TargetView 的指定点或者容器中的任何像素点。自定义一个SnapHelper挺麻烦的,还好android已经为我们内置好了两个实现: LinearSnapHelper & PagerSnapHelper。其中PagerSnapHelper真是我们需要的可以把RecyclerView改的像Viewpager的工具。


new PagerSnapHelper().attachToRecyclerView(mRecyclerView);


RecyclerView打造一个轮播图

gif.gif


  总结



现在看着顺畅多了:一次只能滑动一张图片,停止的时候图片的位置也对了。这样一个基础版的轮播图就做成了。因为本质是一个RecyclerView,我们可以RecyclerView.Itemanimator,来做出更多的动画效果(这个我目前就不太会了(T_T))。最后奉上github地址(https://link.jianshu.com/?t=https://github.com/renjianan/RecyclerBanner),里面有更完整代码,封装了很多自定义属性,欢迎star!


如何您想进技术群和大牛们交流,关注公众号在后台回复 “加群”,或者 “学习” 即可

作者:大头呆

链接:http://www.jianshu.com/p/1e2baec44e0d

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如果您觉得不错,请别忘了分享到您的朋友圈让更多的人看到!! 您的举手之劳,就是对我最好的支持,非常感谢!


每日英文


Steadfast some, don’t try so hard, what you want, time will give you.

踏实一些,不要着急,你想要的,岁月都会给你。


乐乐有话说


一个人的自愈的能力越强,才越有可能接近幸福 。做一个寡言,却心有一片海的人,不伤人害己,于淡泊中,平和自在 。


RecyclerView打造一个轮播图


推荐阅读




知识星球
这里聚集了业界内的大牛,值得各位大牛的加入!

RecyclerView打造一个轮播图 

看完本文有收获?请转发分享给更多人
关注「杨守乐」,提升编程技能

【QQ技术群】279126311 []
【QQ技术群】484572225 [未]


以上就是:RecyclerView打造一个轮播图 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论