这两天面试,回来收到一个要求要实现轮播图的无限轮播效果。
实现这个效果的方法很多种也很简单,最常用的一直前后各加一个ImageView,滑到这个ImageView的时候跳转到第一个图片或者最后一个图片,实现一个错觉。
对于上面这个方法我觉得功能上是实现了,但是还可以具体做些内存上的优化。我在网上搜集了一些资料,比较感兴趣的是基于三张或者两张ImageView的重用。之前尝试了三张ImageView的重用,效果还可以,中间有很多小坑,自己给填平了。至于两张ImageView的重用。。。这个网上好像有人做出来了,但我思路可能不对,这个暂时没实现。
那么说一下三张ImageView的重用思路。用户在操作轮播图的时候,不外乎三个状态,不动、向左滑、向右滑。我们完全可以实现一个效果,左中右三个控件,控件不变化只变化控件上面的内容,这样就达到了重用的效果。
具体流程:
1.展示给用户的始终是中间的一个ImageView;
2.用户向左或向右滑动结束后,重新为ImageView赋值,设置ScrollView的偏移,把中间的ImageView重新拉回中间位置;
这样说起来似乎很简单,但中间的逻辑也是比较麻烦的。写了个Demo放在了cocoachina,有兴趣的同学可以下载看一下。
Demo地址:http://code.cocoachina.com/view/130080