java图片自动轮播原理_Rxjava + ViewPager 打造实用图片轮播

背景

说到图片轮播,之前写过一篇文章《造轮子:android自定义专属广告轮播控件》,不过当时是采用ViewFlipper实现图片轮播的,最近开始研究Rxjava技术,发现有个interval的方法,觉得很实用,就打算去实战写一个东西来玩玩。就笔者目前接触的项目,发现图片轮播这种功能,应用非常之多,由此笔者就构想用Rxjava + ViewPaper去写一个通用能自定义能扩展的图片轮播框架。

目的

开源项目,打造一个好用的图片轮播框架。

思路

相信大家之前都用过ViewPaper,所以此处不多做解释,不清楚的童鞋可以百度或谷歌。Rxjava,之前写过两篇文章:《Rxjava实践之路[入门篇]》、《Rxjava实践之路[初级篇]》,不太清楚的童鞋可以去看看,或者百度查其他文章了解了解。大体实现思路如下:

ViewPaper实现滑动切换页面

Rxjava定时使ViewPaper切换页面

fc84f7954dee?utm_source=oschina-app

1132780-f58fe3a5c5a7c281.jpg

有两个大体思路,接下来我们从细节出发,首先我们考虑以下两个问题:

要不要循环?

要不要自动轮播?

接着就衍生以下几种可能性:

不循环(肯定不轮播,只能手动切换图片)

循环

自动轮播

手动切换图片

fc84f7954dee?utm_source=oschina-app

1132780-c9a67cd151670731.jpg

然后考虑指示器问题,会衍生以下几个问题:

指示器如何摆放?

指示器图标是否需要自定义?

由此诞生以下几种可能性:

指示器摆放位置产生靠左,靠右,靠中三种选择

指示器肯定需要能自定义图标,满足大众选择要求嘛~

接着考虑怎么去实现以上需求,首先我们将ViewPager切换页面划分为两种:

不循环:此时所做工作,跟平常使用ViewPager切换页面无区别,无特殊处理。

循环: 用过ViewPager的童鞋都清楚,ViewPager怎么可以循环呀?这里做了一个巧妙地工作,这也是ViewPaper实现自动轮播原理所在。这块做详细说明,重点来了,大家擦亮眼睛看清啦~~

fc84f7954dee?utm_source=oschina-app

1132780-2d7d1306d1b86b65.jpg

ViewPager实现自动轮播原理说明:

假如现在有三张图需要自动轮播,图1,图2,图3。那轮播View集合就需要增加两张图,在原图3后面增加图1,在原图1前增加图3,处理过后的轮播View集合顺序是这样的图3、图1、图2、图3、图1。此刻有些童鞋看着有点懵,这样处理有啥用呀?

fc84f7954dee?utm_source=oschina-app

1132780-253900d649118aa0.jpg

处理前后比对:

处理前轮播View集合顺序:图1、图2、图3。

处理后轮播View集合顺序:新图3、原图1、原图2、原图3、新图1。

当向右滑动ViewPager,滑动到最后一个位置即新图1,此时做一个巧妙地跳转,ViewPager有个setCurrentItem(int item, boolean smoothScroll)方法,将smoothScroll置为false,跳转到原图1,因为两图是一样的图,而又看不到滑动效果,所以感觉没变一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值