0°

如德芙般丝滑的ViewPager轮播

内容预览:
  • 5.实现移动小红点指示点: pageChangeListener的onPageScrolled回调方法...~
  • Talk is cheap,show you the code https://github.com/18380438200/Smot...~
  • 无论你是几岁,也无论你目前所处的境况有多糟, 只要立定目标、一步一步...~

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

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


  前言



每次在地铁上把玩别的应用时,看着别人家的轮播图总是那么高大上,滑动起来总是那么衔接完美,就像别人家的亚索和盲僧总是那么6。我不服,solo,于是当即也手动写一个。


Talk is cheap,show you the effect:


如德芙般丝滑的ViewPager轮播

giphy.gif

 一、功能简介



自定义的一个BannerView轮播器类,实现可滑动指示点,可调节滑动速度;


  二、实现步骤



1.BannerView引入布局:viewpager显示轮播,linearlayout用于添加一排白色(未选中状态)小圆点,view用于显示红色移动小圆点。


如德芙般丝滑的ViewPager轮播


2.viewpager的pageradapter类,每一项为imageview,实现多张切换。


如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播


Bannerview类中:


3.初始化,包括初始化自动轮播时间,圆点直径,原点间隙,圆点之间圆心间距(算偏移量)。params1第一个点无左间距,params2其余点有左间距。

如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播


4.创建白色小圆点,并添加到linearlayout中,第一个无左边界,其余加入左边界。


如德芙般丝滑的ViewPager轮播


5.实现移动小红点指示点:


pageChangeListener的onPageScrolled回调方法中,回调了positionOffset值,即滑动当前一页的偏移百分比,范围[0-1]。可以根据实时设置小红点params.leftMargin达到移动效果。那么当前左边距是多少呢。比如滑动到第二和第三页之间,那么左边距就是第一个点和第二个点的间隔dotDistance加上第二和第三点之间偏移乘以dotDistance。


如德芙般丝滑的ViewPager轮播

滑动过程演示


如德芙般丝滑的ViewPager轮播


6.实现自设置滚动速度:


要设置滚动,滚动事件来自于viewPager.setCurrentItem(),那么顺藤摸瓜,点进setCurrentItem往上找:


如德芙般丝滑的ViewPager轮播


实现来自setCurrentItemInternal(),点进去继续,来到了ViewPager类中。从setCurrentItemInternal() -> scrollToItem() -> smoothScrollTo(),里面最终是由mScroller.startScroll(sx, sy, dx, dy, duration)实现了滚动。所以我们要改变duration这个值,一不做二不休,采用偷梁换柱,自己Scroller类,覆写startScroll()方法,传入自己的duration。mScroller是Viewpager的一个成员变量,那就用反射替用自己scroller换掉原有的mScroller。


如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播


7.创建Scroller传入duration覆写startScroll,通过反射取得mScroller属性重设mScroller。


如德芙般丝滑的ViewPager轮播


好了,大功告成。完整Bannerview类:


如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播

如德芙般丝滑的ViewPager轮播


MainActivity类:


如德芙般丝滑的ViewPager轮播


  总结



重要的是想到找到滑动偏移和设置时间的办法,在实际做项目中,办法总比困难多。1000个林黛玉就有1000个读者,1000个程序猿就有1000个方法。


Talk is cheap,show you the code

https://github.com/18380438200/SmothViewpager


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

链接:http://www.jianshu.com/p/5c97eae1e6b0

本文来自翻滚吧李博投稿

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

每日英文


Make the person mature is not the time, but the experience. subway tasted, through the nature; through the world, see light the world.

使人成熟的不是岁月,而是经历。百味尝遍,自然看透;看透世态,看淡世事。


乐乐有话说


改变,永远不嫌晚。

无论你是几岁,也无论你目前所处的境况有多糟,

只要立定目标、一步一步往前走,人生随时都有翻盘的可能性。 



如德芙般丝滑的ViewPager轮播


推荐阅读


如德芙般丝滑的ViewPager轮播

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


赞助商

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。

扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!


以上就是:如德芙般丝滑的ViewPager轮播 的全部内容。

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


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