码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-30 08:57:08      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:android   viewpager   

要实现效果如图:

技术分享

(一)实现循环滑动:

(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元素数量
    	 */
		@Override
		public int getCount() {
			return imageList.size()*100;
		}

		/**
		 * 实例化一个元素
		 */
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			
			container.addView(imageList.get(position%imageList.size()));
			return imageList.get(position%imageList.size());
		}
    	
		/**
		 * 判断是否相等
		 */
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO 自动生成的方法存根
			return arg0 == (View)arg1;
		}

		/**
		 * 销毁元素
		 */
		@Override
		public 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,停止定时即可。


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

标签:android   viewpager   

原文地址:http://blog.csdn.net/u011240877/article/details/45374259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!