⾳乐播放之进度条-⾃定义
[要求]
1. 进度条控件打算使⽤系统提供的SeekBar
2. SeekBar 要⽀持拖拉功能即:定点播放
3. SeekBar 要反映播放位置即:播放到哪 SeekBar 就在哪
[原理]
1. ⾳乐定点播放:MediaPlayer.seekTo(int msecond) //单位:毫秒
2. ⾳乐⽂件播放时间:Duration()
3. SeekBar 获取位置:Progress()
4. SeekBar 最⼤值: Max()
[组件]
1、Button :播放控制如:暂停继续
2、TextView :显⽰播放百分⽐
3、SeekBar :进度条
4、RadioGroup :显⽰所有sdcard ⾳乐⽂件
[代码步骤]
1. 定义界⾯:l
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="<a
href="schemas.android/apk/res/android">schemas.android/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="schemas.android/apk/res/android">schemas.android/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=""
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.
3. sBar = (SeekBar)findViewById(R.id.seekb);
4. rGroup = (RadioGroup)findViewById(R.id.radio);
5. cmdButton = (Button)findViewById(d);
6.
7. mPlayer = new MediaPlayer();
8. }
复制代码
3. 拖动SeekBar 且播放指定位置的⾳乐
1.
2. sBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
3.    @Override
4.    public void onProgressChanged(SeekBar seekBar, int progress,
5.      boolean fromUser) {
6.    // TODO Auto-generated method stub
7.
8.    }
9.    @Override
10.    public void onStartTrackingTouch(SeekBar seekBar) {
11.    // TODO Auto-generated method stub
12.    }
13.    @Override
14.    public void onStopTrackingTouch(SeekBar seekBar) {
15.    // TODO Auto-generated method stub
16.    int dest = Progress();
17.
18.    int mMax = Duration();
19.        int sMax = Max();
20.
21.        mPlayer.seekTo(mMax*dest/sMax);
22.
23.    }
24.
25.  });
复制代码
4. 刷新播放位置且使其实时变化
//因为MediaPlayer没有播放进度的回调函数所以只能:开辟⼀个Thread 定时通知其刷新
1.
2. public void startProgressUpdate(){
3.      //开辟Thread ⽤于定期刷新SeekBar
4.      DelayThread dThread = new DelayThread(100);
5.      dThread.start();
6.    }
复制代码
⽽该Thread 具体实现为:
1.
2. private Handler mHandle = new Handler(){
3.      @Override
android radiogroup4.      public void handleMessage(Message msg){
5.      int position = CurrentPosition();
6.
7.      int mMax = Duration();
8.      int sMax = Max();
9.
10.      sBar.setProgress(position*sMax/mMax);
11.      }
12.    };
13.    public class DelayThread extends Thread {
14.      int milliseconds;
15.
16.      public DelayThread(int i){
17.      milliseconds = i;
18.      }
19.      public void run() {
20.      while(true){
21.        try {
22.      sleep(milliseconds);
23.    } catch (InterruptedException e) {
24.      // TODO Auto-generated catch block
25.      e.printStackTrace();
26.    }
27.
28.    mHandle.sendEmptyMessage(0);
29.      }
30.      }
31.    }
复制代码
5. emulator 运⾏截图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。