打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
音乐播放之进度条 - 自定义
[要求]

1. 进度条控件打算使用系统提供的SeekBar

2. SeekBar 要支持拖拉功能 即:定点播放

3. SeekBar 要反映播放位置 即:播放到哪 SeekBar 就在哪

[原理]
1. 音乐定点播放:MediaPlayer.seekTo(int msecond) //单位:毫秒
2. 音乐文件播放时间:MediaPlayer.getDuration()
3. SeekBar 获取位置:SeekBar.getProgress()
4. SeekBar 最大值: SeekBar.getMax()
[组件]
1、Button : 播放控制 如:暂停 继续
2、TextView : 显示播放百分比
3、SeekBar : 进度条
4、RadioGroup : 显示所有sdcard 音乐文件
[代码 步骤]
1. 定义界面:main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
  8.     android:orientation="horizontal"
  9.     android:layout_width="fill_parent"
  10.     android:layout_height="wrap_content"
  11.     >
  12. <Button
  13.  android:id="@+id/cmd"
  14.  android:text="Loading..."
  15.  android:layout_width="90dip"
  16.     android:layout_height="wrap_content"
  17.     android:singleLine="true"
  18. />
  19. <TextView
  20.  android:id="@+id/progress"
  21.  android:text="Progress.."
  22.  android:layout_width="50dip"
  23.     android:layout_height="fill_parent"
  24.     android:gravity="center"
  25.     android:singleLine="true"
  26. />
  27. </LinearLayout>
  28. <SeekBar 
  29.  android:id="@+id/seekb"
  30.  android:max="100"
  31.     android:layout_width="fill_parent"
  32.     android:layout_height="wrap_content"
  33.     />
  34. </LinearLayout>
复制代码

2.  View 初始化
  1. public void initialize(){

  2. sBar = (SeekBar)findViewById(R.id.seekb);
  3. rGroup = (RadioGroup)findViewById(R.id.radio);
  4. cmdButton = (Button)findViewById(R.id.cmd);

  5. mPlayer = new MediaPlayer();
  6. }
复制代码

3. 拖动SeekBar 且播放指定位置的音乐

  1. sBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
  2.    @Override
  3.    public void onProgressChanged(SeekBar seekBar, int progress,
  4.      boolean fromUser) {
  5.     // TODO Auto-generated method stub
  6.    
  7.    }
  8.    @Override
  9.    public void onStartTrackingTouch(SeekBar seekBar) {
  10.     // TODO Auto-generated method stub
  11.    }
  12.    @Override
  13.    public void onStopTrackingTouch(SeekBar seekBar) {
  14.     // TODO Auto-generated method stub
  15.     int dest = seekBar.getProgress();
  16.    
  17.     int mMax = mPlayer.getDuration();
  18.        int sMax = sBar.getMax();
  19.       
  20.        mPlayer.seekTo(mMax*dest/sMax);
  21.       
  22.    }
  23.    
  24.   });
复制代码

4. 刷新播放位置 且使其实时变化

//因为MediaPlayer没有播放进度的回调函数 所以只能:开辟一个Thread 定时通知其刷新


  1. public void startProgressUpdate(){
  2.      //开辟Thread 用于定期刷新SeekBar
  3.      DelayThread dThread = new DelayThread(100);
  4.      dThread.start();
  5.     }
复制代码

 

而该Thread 具体实现为:


  1. private Handler mHandle = new Handler(){
  2.      @Override
  3.      public void handleMessage(Message msg){
  4.       int position = mPlayer.getCurrentPosition();
  5.       
  6.       int mMax = mPlayer.getDuration();
  7.       int sMax = sBar.getMax();
  8.       
  9.       sBar.setProgress(position*sMax/mMax);
  10.      }
  11.     };
  12.     public class DelayThread extends Thread {
  13.      int milliseconds;
  14.      
  15.      public DelayThread(int i){
  16.       milliseconds = i;
  17.      }
  18.      public void run() {
  19.       while(true){
  20.        try {
  21.      sleep(milliseconds);
  22.     } catch (InterruptedException e) {
  23.      // TODO Auto-generated catch block
  24.      e.printStackTrace();
  25.     }
  26.    
  27.     mHandle.sendEmptyMessage(0);
  28.       }
  29.      }
  30.     }
复制代码

 

5. emulator 运行截图:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android开发手记(14) 使用MediaPlayer播放mp3
android 进度条SeekBar显示不全和Framlayout元素遮盖问题
Android网络收音机项目
第十八讲:Android SharedPreferences和File
对话框多种方式详解
多式样ProgressBar
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服