viewpager自动无限循环实现

简述:

通过timer来控制viewpager 自动切换.


使用到的控件:ViewPager Timer TimerTask

1.实现布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <android.support.v4.view.ViewPager
        android:id = "@+id/viewpager"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"/>
    

</LinearLayout>

2.activity的实现
<pre name="code" class="java">	viewpager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager()));
		viewpager.setCurrentItem(1);
		
		page = viewpager.getCurrentItem();
		
		viewpager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int arg0) {
				pageIndex = arg0;
			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			/**
			 * arg0  0:空闲   1:滑动中   2:滑动完成
			 * */
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
				if(arg0 == 0 && !isTimeRun){
					setCurrentItem();
					startTime();
				}else if(arg0 ==1 && isTimeRun){
					stopTime();
				}
				
			}
		});
		
	}
	
	/**
	 * 设置当前选中的page
	 * */
	private void setCurrentItem() {
		
		 page = viewpager.getCurrentItem();
		if(page == 0){
			pageIndex = 3;
		}
		
		if(page == 4){
			pageIndex = 1;
		}
		viewpager.setCurrentItem(pageIndex,false);
		
	}


 

3.开启一个定时任务

/**
	 * 开启一个定时任务
	 * */
	private void startTime(){
		
		isTimeRun = true;
		
		timer = new Timer();
		task = new TimerTask() {
			
			@Override
			public void run() {
				
				pageIndex++;
				//发送handler 去外部执行
				Message msg = Message.obtain();
				msg.what = 0;
				handler.sendMessage(msg);
			}
		};
		
		timer.schedule(task, 2 * 1000, 2 * 1000);// 这里设置自动切换的时间,单位是毫秒,2*1000表示2秒
	}
	
	
	/**
	 * 创建一个handler 去处理消息队列
	 * 
	 * */
	private Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			if(msg.what == 0){
				setCurrentItem();
			}
		}
	};
	
	
	/**
	 * 停止计时器
	 * */
	private void stopTime(){
		isTimeRun = false;
		task.cancel();
	}

4.viewpager的适配器的实现

/**
	 * 创建viewpager的适配器
	 * 
	 * */
	private class MyFragmentAdapter extends FragmentPagerAdapter{

		private ArrayList<Fragment> list;
		
		public MyFragmentAdapter(FragmentManager fm) {
			super(fm);
			list = new ArrayList<Fragment>();
			list.add(new FragmentOne2());
			list.add(new FragmentOne());
			list.add(new FragmentOne1());
			list.add(new FragmentOne2());
			list.add(new FragmentOne());
		}

		@Override
		public Fragment getItem(int arg0) {
			// TODO Auto-generated method stub
			return list.get(arg0);
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return list.size();
		}
		
	}


其中一个重要的地方是,添加了5个fragment,这样,就实现了viewpager的无限自动循环.



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值