ViewPager+定时器+自动播放
博客专区 > 荷西 的博客 > 博客详情
ViewPager+定时器+自动播放
荷西 发表于3年前
ViewPager+定时器+自动播放
  • 发表于 3年前
  • 阅读 43
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: ViewPager垂直方向滑动,使用定时器实现自动播放图片,当手指滑动时停止自动播放,添加图片时在存放imageview的list中最后再次添加第一张图片,目的是实现可以循环滑动
定时器实现图片自动播放关键代码:
    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];



  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 1
码字总数 407
×
荷西
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: