ViewPager实现自动循环切换

来源:互联网 发布:淘宝森女部落 编辑:程序博客网 时间:2024/05/22 03:13

  一实现循环滑动

   (1)在MyAdapter中首先修改getCount()方法中的大小,让ViewPager可滑动页面增多

   (2)instantiateItem()方法中将position对图片数组求余:position%imageList.size()

  (3)如果viewPager设置了OnPagerChangedListener方法,里面可能会有position,注意将position求余,否则可能会由于position作索引下标导致数组溢出异常。 

  (4)以上操作只能右循环,要实现左循环,只需把初始位置设置为getCount()方法中返回  大小的一半,那样我们就可以向左滑

(注意:这只是看起来循环,实际上只不过是NView在重复这5View

 如下: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;


};

}

0 0
原创粉丝点击