【ViewPager的学习】实现自动循环切换

来源:互联网 发布:php apc缓存 编辑:程序博客网 时间:2024/05/18 03:24

(一)实现循环滑动:

(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

代码如下:

private class MyAdapter extends PagerAdapter{    /**     * 返回viewPager元素数量     */@Overridepublic int getCount() {return imageList.size()*100;}/** * 实例化一个元素 */@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(imageList.get(position%imageList.size()));return imageList.get(position%imageList.size());}    /** * 判断是否相等 */@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO 自动生成的方法存根return arg0 == (View)arg1;}/** * 销毁元素 */@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// TODO 自动生成的方法存根container.removeView((View) object);object = null;}    }

(二)实现自动滚动,设定一个定时器

/*
 * 自动循环有多种实现方式:
 * 1、定时器:Timer
 * 2、开子线程 while  true 循环
 * 3、ColckManager 
 * 4、 用handler 发送延时信息,实现循环
 */

这里我们用第四种,比较高效:

<span style="white-space:pre"></span>//判断是否自动滚动的标志  private boolean isrunning = false;    /**     * 自动滑动的Handler     * 利用 Handler.sendEmptyMessageDelayed方法,实现定时滚动     *     */    private Handler handler = new Handler(){    public void handleMessage(android.os.Message msg) {    //让ViewPager滑到下一页    viewPager.setCurrentItem(viewPager.getCurrentItem()+1);    //延时,循环调用handler    if(isrunning){    handler.sendEmptyMessageDelayed(0, 2000);    }    };    };        /**     * Activity生命周期结束时终止定时,否则可能一直进行下去     */    protected void onDestroy() {super.onDestroy();    isrunning = false;    };

在onCreate()方法中发送一个消息启动Handler。

handler.sendEmptyMessageDelayed(0, 2000);


为了在Activity生命周期结束时终止定时器,重写onDestory方法,里面将定时器标志置为false,停止定时即可。

0 0
原创粉丝点击