今天下午结束了,重新加载网络页面的优化。并完成了viewpager的循环滑动和图片轮播。感触颇深啊,刚开始提手的时候发现我连viewpager怎么都忘记了。
图片的轮播和循环滑动两个功能结合在一起的话,我认为,还是用viewpager最为简单。有查资料,现在主流的方式主要是两种, 一种是在list的头和尾个添加一个元素如:list–>1,2,3那么添加完了以后的结果是:list–>3,1,2,3,1。但是显示的是原来的三个元素。通过onPagerChangeListener中的onPageSelected方法设定:(以三个元素为例)在viewpager的位置小于1的时候,3,在大于3的时候则直接跳到1(这里的位置都是包括0的)。由此来实现循环滑动。
但是这种方法有一个缺陷,就是在一组数据滑完,进入另一组数据进行切换的时候,会有明显的不自然的感觉。
因此,基于良好的用户体验,我选择了第二种。而第二种方法是通过将循环的数目增到最大:
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
通过 return views.get(position % views.size());来确定viewpager的位置,但是这样也是有缺陷的。首先它不是真正意义上的无限循环,只不过是有很大的边界而已。其次,当页面的总数是2和3的时候,就不能销毁复用的页面,否者会出现错误,程序报错说是,在添加新的页面之前没有将之前的页面销毁掉。研究一下发现viewpager一般会缓存两个数据,而2和3刚好在这两个缓存的数据之间。要修改这个bug的话就要重写viewpager类,显然,这样做很麻烦,也费时费力所以我设置了一个判断来解决这个问题。接下来上整个pagerAdapter的代码和setadapter的代码。
ViewpagerAdapter 代码:
public class ViewpagerAdapter extends PagerAdapter {
private Context mContext;
private List<View&