其实在Android刚推出属性动画的时候,就想利用它来设计一个Banner控件,一直没什么时间尝试。在当时看我们应用中的Banner,使用计时器来控制自动播放,设置一个很大的数,利用余数原理来实现ViewPager循环,在进行内存分析的时候,看似不起眼的Banner却是一个消耗内存的大户,相信很多App的Banner都是计时器加ViewPager的方式实现的。
最近时间比较宽裕,可以做一些研究性的工作,因此打算尝试使用属性动画实现Banner。目前仅仅是尝试了一下如何实现,暂还未将其做成一个控件,最后的示例代码也是如此,仅仅是实现原理的一个演示,待后续测一下性能,如果还可以的话再做成自定义控件。先做一些声明:
1.这里仅仅演示一个示例,说明这种Banner的实现原理,暂未封装成控件
2.示例中手势滑动仅用按钮点击来模拟
3.由于仅演示原理,示例中未添加Indicator的联动效果,也没有Banner的点击响应
4.Banner的移动速度由动画时间控制,可自由设置,示例中设置的时间较短,故移动比较快
5.Banner尺寸暂时写死了,仅适配Nexus4手机,其他手机测试请自行获取Banner宽度
6.请分别测试自动播放和左滑、右滑
7.上述问题皆可在封装成正式控件时解决,同时还有图片缓存等
8.另外Banner播放移动由属性动画控制,因此3.0以下需额外动画库nineoldandroids
先来看下效果图(动画录制的很差,上两张静态图好了,大概可以看到Banner的移动过程):