一实现循环滑动
(1)在MyAdapter中首先修改getCount()方法中的大小,让ViewPager可滑动页面增多
(2)instantiateItem()方法中将position对图片数组求余:position%imageList.size()
(3)如果viewPager设置了OnPagerChangedListener方法,里面可能会有position,注意将position求余,否则可能会由于position作索引下标导致数组溢出异常。
(4)以上操作只能右循环,要实现左循环,只需把初始位置设置为getCount()方法中返回 大小的一半,那样我们就可以向左滑
(注意:这只是看起来循环,实际上只不过是N个View在重复这5中View。
如下:0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5.....0,1,2,3,4,5)
代码如下:
/**
* ViewPager中的显示View的imgs数组
* **/
Context context;
private int imgs[]={R.drawable.shicaivw1,R.drawable.shicaivw2,R.drawable.shicaivw3};
public InnerPagerAdapter (Context context) {
this.context=context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 1000;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==(View)arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView iv=new ImageView(context);
iv.setImageResource(imgs[position%3]);
container.addView(iv);
return iv;
}
}
二.实现自动滚动
/*
* 自动循环有多种实现方式:
* 1、定时器:Timer
* 2、开子线程 while true 循环
* 3、ColckManager
* 4、 用handler 发送延时信息,实现循环
*/
这里我们用第四种,比较高效:
public class MainActivity extends Activity {
ViewPager viewPager;
InnerPagerAdapter adapter;
private boolean isrunning=true;
Handler handler;
int a=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewPager();
setRoller();
}
private void setRoller() {
handler=new Handler(){
public void handleMessage(Message msg) {
//延时,循环调用handler
if (isrunning) {
//让ViewPager滑动下一页
viewPager.setCurrentItem(a++);
}
handler.sendEmptyMessageDelayed(0,3000);
};
};
handler.sendEmptyMessageDelayed(0, 3000);
}
private void initViewPager() {
viewPager=(ViewPager)findViewById(R.id.am_vp_pager);
adapter=new InnerPagerAdapter(this);
viewPager.setAdapter(adapter);
}
/**
* Activity生命周期结束时终止定时,否则可能一直进行下去
* */
protected void onDestroy() {
super.onDestroy();
isrunning=false;
};
}