由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下。最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了,但是讲的都不清楚,我查了很多资料,我就知道position/list.size().但是怎么用,我还是不明白。我后来看了百度工程师任玉刚的 循环广告位组件的实现 突然明白了无限滚动的原理。总结如下:
1.要在 int getCount() 方法里 写 return BANNER_SIZE。 这个 BANNER_SIZE 是一个定义好的常量,最好定义大一点,比如1000、10000。我以前对这个方法的返回值到底表示什么意思我不太明白。如果写成 return list.size()那就好懂。我觉得这个返回列表的可能性比较大,因为这个viewpager的图片是从服务器端返回的,数量和地址随时会发生变化的。返回大一点的值如1000是viewpager表示这个viewpager你可以在上面滑动1000下。如果你只有3张图片,你不停的滑动,让这3张图片来回显示,也就是让position 0 1 2 0 1 2 0 1 2..... 不就是你想要的无限循环滑动吗? 那么这个怎么让它循环滑动呢。那么就要在实现 Object instantiateItem(ViewGroup container, int position) 方法。
如果是viewpager显示服务端返回的图片,要把下载网络的图片代码放在这里写,比如用imagerloader 下载图片(顺便赞下这个框架,使用起来非常方便,我真想发一份邮件感谢这个框架的作者,写的太棒了,造福全世界的coder啊,不用不知道,用了吓一跳)。好了,要想position是 0 1 2 0 1 2循环,那么就得写成position=position % list.size()(我觉得不是position %BANNER_SIZE, 不然就出现数组下标越界了,任玉刚的好像也写错了) 右边的 postion是上面的getCount()返回值的position。比如设置1000,那么position就是 0 1 2 3 4 .......1000, 这样左边的position的值就是在 0 1..list.size()循环了。图片集合的大小为3,那么就是 0 1 2 0 1 2..... 而是显示图片的下表是就是始终在0 1 2循环了。这样到你滑动到第四屏的时候,就显示第一张,滑动第五屏就是第二张图片,滑动第六屏就是第三张图片,这样以此类推。这样就可以实现循环滑动了,但是真的是“无限”循环吗? 如果你真的闲的没事,不停的滑啊,滑啊,滑啊,肯定会在某个时候无法滑动了。这样做的目的就是让你觉得是无限滑动了。还有我的体会是instantiateItem像baseadpter的里getview()方法 控制listview的每一个item的。viewpager显示图片实际上用imageview来显示每一张图片的,这个跟listview显示图片列表是一样的道理。