背景
说到图片轮播,之前写过一篇文章《造轮子:android自定义专属广告轮播控件》,不过当时是采用ViewFlipper实现图片轮播的,最近开始研究Rxjava技术,发现有个interval的方法,觉得很实用,就打算去实战写一个东西来玩玩。就笔者目前接触的项目,发现图片轮播这种功能,应用非常之多,由此笔者就构想用Rxjava + ViewPaper去写一个通用能自定义能扩展的图片轮播框架。
目的
开源项目,打造一个好用的图片轮播框架。
思路
相信大家之前都用过ViewPaper,所以此处不多做解释,不清楚的童鞋可以百度或谷歌。Rxjava,之前写过两篇文章:《Rxjava实践之路[入门篇]》、《Rxjava实践之路[初级篇]》,不太清楚的童鞋可以去看看,或者百度查其他文章了解了解。大体实现思路如下:
ViewPaper实现滑动切换页面
Rxjava定时使ViewPaper切换页面
1132780-f58fe3a5c5a7c281.jpg
有两个大体思路,接下来我们从细节出发,首先我们考虑以下两个问题:
要不要循环?
要不要自动轮播?
接着就衍生以下几种可能性:
不循环(肯定不轮播,只能手动切换图片)
循环
自动轮播
手动切换图片
1132780-c9a67cd151670731.jpg
然后考虑指示器问题,会衍生以下几个问题:
指示器如何摆放?
指示器图标是否需要自定义?
由此诞生以下几种可能性:
指示器摆放位置产生靠左,靠右,靠中三种选择
指示器肯定需要能自定义图标,满足大众选择要求嘛~
接着考虑怎么去实现以上需求,首先我们将ViewPager切换页面划分为两种:
不循环:此时所做工作,跟平常使用ViewPager切换页面无区别,无特殊处理。
循环: 用过ViewPager的童鞋都清楚,ViewPager怎么可以循环呀?这里做了一个巧妙地工作,这也是ViewPaper实现自动轮播原理所在。这块做详细说明,重点来了,大家擦亮眼睛看清啦~~
1132780-2d7d1306d1b86b65.jpg
ViewPager实现自动轮播原理说明:
假如现在有三张图需要自动轮播,图1,图2,图3。那轮播View集合就需要增加两张图,在原图3后面增加图1,在原图1前增加图3,处理过后的轮播View集合顺序是这样的图3、图1、图2、图3、图1。此刻有些童鞋看着有点懵,这样处理有啥用呀?
1132780-253900d649118aa0.jpg
处理前后比对:
处理前轮播View集合顺序:图1、图2、图3。
处理后轮播View集合顺序:新图3、原图1、原图2、原图3、新图1。
当向右滑动ViewPager,滑动到最后一个位置即新图1,此时做一个巧妙地跳转,ViewPager有个setCurrentItem(int item, boolean smoothScroll)方法,将smoothScroll置为false,跳转到原图1,因为两图是一样的图,而又看不到滑动效果,所以感觉没变一样