前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实习入职第九天:MediaPlayer添加进度条的两种方式

实习入职第九天:MediaPlayer添加进度条的两种方式

作者头像
wust小吴
发布2019-07-08 18:01:26
7870
发布2019-07-08 18:01:26
举报
文章被收录于专栏:风吹杨柳风吹杨柳

1.使用handler做:

代码语言:javascript
复制
	Handler handler = new Handler();
	Runnable updateThread = new Runnable() {
		public void run() {
			// 获得歌曲现在播放位置并设置成播放进度条的值
			if (mediaPlayer != null) {
				sb.setProgress(mediaPlayer.getCurrentPosition());
				// 每次延迟100毫秒再启动线程
				handler.postDelayed(updateThread, 100);
			}
		}
	};

然后在onPrepare()里面post出去,在程序退出的时候销毁handler.removeCallback(runnable)

2.利用mediaPlayer.setOnBufferingUpdateListener方法做

也是在onPrepare里面添加下面的代码即可,把我注视的地方都去掉就可以显示了,

mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() { // int currentPosition, duration; @Override public void onBufferingUpdate(MediaPlayer mp, int percent) { // currentPosition = mediaPlayer.getCurrentPosition(); // duration = mediaPlayer.getDuration(); // int time = ((currentPosition * 100) / duration); // mProgressBar.setProgress(time); mProgressBar.setSecondaryProgress(percent); } });

3.利用timer定时器任务:

  1. /*******************************************************
  2.      * 通过定时器和Handler来更新进度条
  3.      ******************************************************/
  4.     TimerTask mTimerTask = new TimerTask() {  
  5. @Override
  6. public void run() {  
  7. if(mediaPlayer==null)  
  8. return;  
  9. if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false) {  
  10.                 handleProgress.sendEmptyMessage(0);  
  11.             }  
  12.         }  
  13.     };  
  14.     Handler handleProgress = new Handler() {  
  15. public void handleMessage(Message msg) {  
  16. int position = mediaPlayer.getCurrentPosition();  
  17. int duration = mediaPlayer.getDuration();  
  18. if (duration > 0) {  
  19. long pos = skbProgress.getMax() * position / duration;  
  20. skbProgress.setProgress((int) pos);  
  21.             }  
  22.         };  
  23.     };  
  24. //*****************************************************

这种做法虽然多点,但是代码是最  好的,因为他把事件掉到handler里面来处理了,而不是在run中处理,在run中处理会发生各种想不到的事

启动异步任务的地方最好也是放在  onPrepare里面

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档