今天学渣研究了一下使用MediaPlayer播放音乐时添加进度条,进度条现在用的是android自带的seekbar,后期会跟换UI的,在之前能够播放音乐的基础上,现在添加的主要功能有两个:

1实时显示播放进度

2手动调节播放进度

现在学渣新建了一个项目来进行测试,后期会和之前博客介绍的滑动页面进行整合,估计会在service建好后整合,敬请期待。。。。

好了先上效果图:

关于使用进度条的基本原理很简单,用到了几个参数:

1 歌曲的时长:单位为毫秒,MediaPlayer的getDuration(),不过要注意getDuration()的使用状态,在这篇博客中介绍了MediaPlayer的各个状态,大家可以去看看。

2 进度条的长度:android里进度条的长度默认应该是100,单位不详,没影响

3 当前进度:对于歌曲而言,当前进度是当前播放的歌曲所在位置,单位毫秒,对于进度条而言,是在进度条中所占的比例。主要是对这两个进行转化。

两个功能:

1由于进度需要实时更新,因此在系统中用一个线程对UI线程发消息(每隔100毫秒),在UI线程中用Handler捕获消息,通过MediaPlayer的getCurrentPosition得到当前位置,进而计算seekbar对应的位置,对seekbar及时进行更新。

2对于手动调节歌曲进度时,通过获取调节到的位置,通过SeekBar.OnSeekBarChangeListener()监听滑动条,当滑动条调节位置确定后,通过onStopTrackingTouch()及时更新歌曲的进度,用MediaPlayer的seekTo(单位是毫秒)调节歌曲的进度。

具体代码如下:

[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class MainActivity extends Activity {

MediaPlayer mediaPlayer;  SeekBar seekBar;  //本地歌曲的路径
String path = "/storage/sdcard1/Music/浪漫满屋.mp3";  //处理进度条更新
Handler mHandler = new Handler(){  @Override    public void handleMessage(Message msg){    switch (msg.what){  case 0:  //更新进度  int position = mediaPlayer.getCurrentPosition();    int time = mediaPlayer.getDuration();    int max = seekBar.getMax();    seekBar.setProgress(position*max/time);    break;  default:  break;  }  }
};  @Override
protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  init();  //初始化播放按钮  Button playButton = (Button)findViewById(R.id.playButton);  playButton.setOnClickListener(new OnClickListener(){  @Override  public void onClick(View arg0) {  // TODO Auto-generated method stub  Toast.makeText(MainActivity.this, "time is "+mediaPlayer.getDuration(), 1000).show();  play();  }  });  //初始化暂停按钮  Button pauseButton = (Button)findViewById(R.id.pauseButton);      pauseButton.setOnClickListener(new OnClickListener(){  @Override  public void onClick(View arg0) {  // TODO Auto-generated method stub  pause();  }  });  seekBar = (SeekBar)findViewById(R.id.seekbar);  seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {  @Override  public void onStopTrackingTouch(SeekBar seekBar) {  //手动调节进度  // TODO Auto-generated method stub  int dest = seekBar.getProgress();  int time = mediaPlayer.getDuration();  int max = seekBar.getMax();  mediaPlayer.seekTo(time*dest/max);  }  @Override  public void onStartTrackingTouch(SeekBar arg0) {  // TODO Auto-generated method stub  }  @Override  public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  // TODO Auto-generated method stub  }  });  }

//初始化音乐播放
void init(){
//进入Idle
mediaPlayer = new MediaPlayer();
try {
//初始化
mediaPlayer.setDataSource(path);

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);    // prepare 通过异步的方式装载媒体资源  mediaPlayer.prepareAsync();  //后台线程发送消息进行更新进度条  final int milliseconds = 100;  new Thread(){  @Override  public void run(){  while(true){    try {    sleep(milliseconds);    } catch (InterruptedException e) {    // TODO Auto-generated catch block    e.printStackTrace();    }    mHandler.sendEmptyMessage(0);    }    }  }.start();  } catch (Exception e) {  // TODO Auto-generated catch block  e.printStackTrace();  }
}  //测试播放音乐
void play(){          mediaPlayer.start();
}  //暂停音乐
private void pause() {    if (mediaPlayer != null && mediaPlayer.isPlaying()) {    mediaPlayer.pause();    }
}    //activity 退出时,停止播放音乐,释放资源
@Override
protected void onDestroy() {  // 在activity结束的时候回收资源  if (mediaPlayer != null && mediaPlayer.isPlaying()) {  mediaPlayer.stop();  mediaPlayer.release();  mediaPlayer = null;  }  super.onDestroy();

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

MediaPlayer 音乐播放器进度条相关推荐

  1. android实现音乐播放器(进度条)

    |--效果图 |--依赖3个对象 MediaPlayer:实现音乐播放,暂停,缓冲.     SeekBar:滑动的进度条. java.util.Timer:定时器,时时更新进度条. |--main. ...

  2. android音乐播放器进度条误差研究

    2019独角兽企业重金招聘Python工程师标准>>> 如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的 ...

  3. android音乐播放器进度条研究

    如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的精度 频度和精度要相适应,才能保证流畅,并不是精度越高越好,也不是频度越高 ...

  4. AndroidStudio音乐播放器进度条和歌曲时间的操作

    1.首先,我们需要使用在activity_main布局中定义好一个SeekBar和两个ListView,SeekBar表示进度条,两个ListView分别用来表示当前的时间和歌曲的总时间. 2.在Mu ...

  5. html音乐播放器进度条同步,网页音乐播放器完整版特效,自行控制,带进度条...

    WWW.51JS.COM---[94OK] //---------这是区分播放器的音乐类型,你可以填加修改------// var RS = new Array("rm",&quo ...

  6. android mp3进度条和时间,AndroidStudio音乐播放器进度条和歌曲时间的操作

    1.首先,我们需要使用在activity_main布局中定义好一个SeekBar和两个ListView,SeekBar表示进度条,两个ListView分别用来表示当前的时间和歌曲的总时间. 2.在Mu ...

  7. Vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果

    vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果 需求分析: 类似于大多数音乐播放器中等mini播放器控制按钮,显示播放进度,实时更新进度. progress-cir ...

  8. Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐

    Android MediaPlayer 本地音乐播放器 运行截图 项目请在真机(自己的手机)上测试运行,因为我不喜欢用虚拟机. 为了不浪费您的时间,先看一下运行的效果图, 一进去先进行音乐扫描,然后列 ...

  9. android 音乐播放 圆形进度条

    上次 上传gif后 没动 不知道这次会不会动 在依次吐槽 csdn的博客模板   原来要选择 无水印 我的天 gif才成功 上次写了一个音乐播放器 今天吧里面的一个效果写出来 写博客的习惯要慢慢养成 ...

最新文章

  1. 《淘宝网开店 进货 运营 管理 客服 实战200招》——2.3 开店需要掌握哪些 进货技巧...
  2. 强化学习原理与python实现原理pdf_纯Python实现!Facebook发布PyTorch分布式强化学习库...
  3. 全面认识UML-类图元素(java)
  4. 机器学习十大经典算法之KNN最近邻算法
  5. shell编程关于数组的那点事
  6. 非对称加密算法RSA
  7. 我的QQ群,欢迎入坑!
  8. 用Cython编译Python的C扩展
  9. 转载:Oracle导入导出命令的使用
  10. 问卷与量表数据分析(SPSS+AMOS)学习笔记(十四) :量表初测阶段的信度分析,删除题项
  11. 游戏程序员如何正确的写简历
  12. 服务器ip显示静态表示什么,静态ip是什么意思 什么是静态IP
  13. 程序员如何提高编程时打字速度的5个Tips
  14. 简单好听的id_简单好听的贴吧id名字大全
  15. 函数abs 和fabs
  16. 【BUUCTF】[MRCTF2020]套娃
  17. PS中可选颜色的计算方法(绝对量)
  18. 加速扩张中的喜茶、奈雪们,为其它品牌提供了怎样的私域启示
  19. 【游戏程序设计】程序框架
  20. 自己公司的gitlab和官网gitlab都是以下的操作步骤!(我是自己公司的gitlab已成功)

热门文章

  1. WPBeginner赠品获奖者+我们建立了2所学校
  2. 数据管理技术(一)数据管理的发展历程
  3. 学一部英语电影,相当于在外国生活一个月
  4. 修改注册表解决Win10 SSD卡顿
  5. 生成小程序太阳码-微信文档错误
  6. Python Unicode和string
  7. CString的截取字符串函数,如Mid、Left和Right
  8. 小程序使用图表(wxcharts)的注意事项
  9. java阻塞队列和非阻塞队列的区别
  10. 浏览器中F5刷新和crtl+F5的区别