ViewPager+定时器+自动播放

定时器实现图片自动播放关键代码:
    private ScheduledThreadPoolExecutor exec;//定时器
    private VerticalViewPager verticalPager1;//垂直的ViewPager
    @Override
	protected void onStart() {
		// 用一个定时器 来完成图片切换
		// Timer 与 ScheduledExecutorService 实现定时器的效果

		// scheduledExecutorService = Executors.newScheduledThreadPool(3);
		exec = new ScheduledThreadPoolExecutor(1);
		// 通过定时器 来完成 每2秒钟切换一个图片
		// 经过指定的时间后,执行所指定的任务
		// scheduleAtFixedRate(command, initialDelay, period, unit)
		// command 所要执行的任务
		// initialDelay 第一次启动时 延迟启动时间
		// period 每间隔多次时间来重新启动任务
		// unit 时间单位
		// .scheduleAtFixedRate(command, initialDelay, period, unit)
		exec.scheduleAtFixedRate(new ViewPagerTask(), 5, 6, TimeUnit.SECONDS);
		super.onStart();

	}
	
	// 用来完成图片切换的任务
	private class ViewPagerTask implements Runnable {

		public void run() {
			// 实现我们的操作
			// 改变当前页面
			currentItem = (currentItem + 1) % pageViews.size();
			// Handler来实现图片切换
			handler.obtainMessage().sendToTarget();
		}
	}
	
	//handler
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {

			verticalPager1.setCurrentItem(currentItem);
			
		}
	}
	
	//ViewPager页面监听器
	verticalPager1.setOnPageChangeListener(new OnPageChangeListener() {

		@Override
		public void onPageSelected(int position) {
			currentItem = position;
		}

		@Override
		public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {
			Log.e("sc", "----position----" + position+ "----->positionOffset---" + positionOffset+ "---->positionOffsetPixels---"+ positionOffsetPixels);
			if (position == pageViews.size() - 1) {//当滑动到list中最后一张图片时,将该图片的position置为0,实现循环滑动
				verticalPager1.setCurrentItem(0, false);
			}

		}

		@Override
		public void onPageScrollStateChanged(int state) {
			if (state == 1 && exec != null) {
				if (!exec.isShutdown()) {
					Log.e("1", "-----shutdown----");
					exec.shutdown();
					exec = null;
				}
			} else if (state == 0) {
				Log.e("1", "----start----");
				synchronized (_lock) {
					if (exec == null) {
						exec = new ScheduledThreadPoolExecutor(1);
						exec.scheduleAtFixedRate(new ViewPagerTask(),5, 6, TimeUnit.SECONDS);
					}
				}

			}
		}
	});
			
	byte[] _lock = new byte[1];



你可能感兴趣的:(viewpager,定时器,自动播放)