群里大神发了一篇关于使用ViewPager实现左右循环滑动图片的文章(http://blog.csdn.net/xiaanming/article/details/8966621),以此为参照学习ViewPager。本文为学习记录,难免有差错,望指正。
另外http://blog.csdn.net/wangjinyu501/article/details/8169924 也可以作为ViewPager参考。
大神在文中有这么一行代码;
//设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
viewPager.setCurrentItem((mImageViews.length) * 100);
开始不明白,但是研究了下面这段代码后似乎知道为什么要这么写了。
@Override
public Object instantiateItem(View container, int position) {//这个方法用来实例化页卡
((ViewPager)container).addView(mImageViews[position % mImageViews.length],0);//添加页卡
// System.out.println("add -- position = " + position + "余数 = " + position % mImageViews.length);
return mImageViews[position % mImageViews.length];
}
ViewPager在载入项目时实际上载入了3个项目,即当前显示的项目、显示项左侧项目和显示项右侧项目,在本例中项目position分别是600、599、601 。当手指左滑时界面显示601,并加载602、移除599。原来想不通他是在什么地方实现了“ 滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页”,看了很多代码发现实现方式都和他不一样。作者用了一个很聪明的办法,用余数的方法很容易实现5、0、1这样的排列(这是在mImageViews.length = 6的情况下),就能很简单的实现从头到尾,从尾到头的切换了。所以选对实现方式也是一个很关键的地方。而之前的setCurrentItem()方法就是设置当前显示项的position (一开始就可以右滑跳到最后一项)。
ViewPager的点击事件监听可以写在
//将图片装载到数组中
mImageViews = new ImageView[imgIdArray.length];
for(int i=0; i<mImageViews.length; i++){
ImageView imageView = new ImageView(this);
mImageViews[i] = imageView;
imageView.setBackgroundResource(imgIdArray[i]);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "this is clicked", Toast.LENGTH_SHORT).show();
}
});
程序比较简单,其他的多练习练习就能明白。
最后,好好学习,天天向上。