MediaPlayer 音乐播放器进度条
今天学渣研究了一下使用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 音乐播放器进度条相关推荐
- android实现音乐播放器(进度条)
|--效果图 |--依赖3个对象 MediaPlayer:实现音乐播放,暂停,缓冲. SeekBar:滑动的进度条. java.util.Timer:定时器,时时更新进度条. |--main. ...
- android音乐播放器进度条误差研究
2019独角兽企业重金招聘Python工程师标准>>> 如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的 ...
- android音乐播放器进度条研究
如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的精度 频度和精度要相适应,才能保证流畅,并不是精度越高越好,也不是频度越高 ...
- AndroidStudio音乐播放器进度条和歌曲时间的操作
1.首先,我们需要使用在activity_main布局中定义好一个SeekBar和两个ListView,SeekBar表示进度条,两个ListView分别用来表示当前的时间和歌曲的总时间. 2.在Mu ...
- html音乐播放器进度条同步,网页音乐播放器完整版特效,自行控制,带进度条...
WWW.51JS.COM---[94OK] //---------这是区分播放器的音乐类型,你可以填加修改------// var RS = new Array("rm",&quo ...
- android mp3进度条和时间,AndroidStudio音乐播放器进度条和歌曲时间的操作
1.首先,我们需要使用在activity_main布局中定义好一个SeekBar和两个ListView,SeekBar表示进度条,两个ListView分别用来表示当前的时间和歌曲的总时间. 2.在Mu ...
- Vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果
vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果 需求分析: 类似于大多数音乐播放器中等mini播放器控制按钮,显示播放进度,实时更新进度. progress-cir ...
- Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
Android MediaPlayer 本地音乐播放器 运行截图 项目请在真机(自己的手机)上测试运行,因为我不喜欢用虚拟机. 为了不浪费您的时间,先看一下运行的效果图, 一进去先进行音乐扫描,然后列 ...
- android 音乐播放 圆形进度条
上次 上传gif后 没动 不知道这次会不会动 在依次吐槽 csdn的博客模板 原来要选择 无水印 我的天 gif才成功 上次写了一个音乐播放器 今天吧里面的一个效果写出来 写博客的习惯要慢慢养成 ...
最新文章
- 《淘宝网开店 进货 运营 管理 客服 实战200招》——2.3 开店需要掌握哪些 进货技巧...
- 强化学习原理与python实现原理pdf_纯Python实现!Facebook发布PyTorch分布式强化学习库...
- 全面认识UML-类图元素(java)
- 机器学习十大经典算法之KNN最近邻算法
- shell编程关于数组的那点事
- 非对称加密算法RSA
- 我的QQ群,欢迎入坑!
- 用Cython编译Python的C扩展
- 转载:Oracle导入导出命令的使用
- 问卷与量表数据分析(SPSS+AMOS)学习笔记(十四) :量表初测阶段的信度分析,删除题项
- 游戏程序员如何正确的写简历
- 服务器ip显示静态表示什么,静态ip是什么意思 什么是静态IP
- 程序员如何提高编程时打字速度的5个Tips
- 简单好听的id_简单好听的贴吧id名字大全
- 函数abs 和fabs
- 【BUUCTF】[MRCTF2020]套娃
- PS中可选颜色的计算方法(绝对量)
- 加速扩张中的喜茶、奈雪们,为其它品牌提供了怎样的私域启示
- 【游戏程序设计】程序框架
- 自己公司的gitlab和官网gitlab都是以下的操作步骤!(我是自己公司的gitlab已成功)