1. 程式人生 > >AndroidStudio音樂播放器進度條和歌曲時間的操作

AndroidStudio音樂播放器進度條和歌曲時間的操作

1、首先,我們需要使用在activity_main佈局中定義好一個SeekBar和兩個ListView,SeekBar表示進度條,兩個ListView分別用來表示當前的時間和歌曲的總時間。
2、在MusicActivity中定義三個物件,在之前的play方法中繫結id:
private SeekBar seekBar;
private TextView currentTV;
private TextView totalTV;
//繫結id;
seekBar = findViewById(R.id.music_seekbar);
totalTV = findViewById(R.id.music_total_time);
currentTV = findViewById(R.id.music_current_time);
3、使用formatTime方法對時間格式化:
private String formatTime(int length){
Date date = new Date(length);
//時間格式化工具
SimpleDateFormat sdf = new SimpleDateFormat(“mm:ss”);
String totalTime = sdf.format(date);
return totalTime;
}
4、對seekBar設定監聽,方便使用者在拖動進度條時能到達相應的位置,歌曲能夠連貫:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b){
mediaPlayer.seekTo(i);
}
}
( i 指當前所在的位置)
5、使用多執行緒方法實現多執行緒的實現進度條的滾動條的程序:
子執行緒:
注意:安卓機制規定不能在子執行緒中進行更新UI,所以我們必須使用setEmptyMessage方法,向主執行緒傳送訊息
class MusicThread implements Runnable{
@Override
public void run() {
while (!isStop&&mediaPlayer!=null){
//給主執行緒發訊息,更新UI
handler.sendEmptyMessage(mediaPlayer.getCurrentPosition());//獲取當前的點選位置;
try{
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}}
}
主執行緒:
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
注意:在主執行緒中使用handleMessage接收子執行緒傳送的訊息
//更新Seekbar
seekBar.setProgress(msg.what);
//更新TextView
currentTV.setText(formatTime(msg.what));
}
};
6、因為我們在操作的時候按下暫停,進度條和當前時間會不動,所以我們要定義boolean型別的isStop = false,在下面的位置使用:
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.reset();
isStop = true;
}

@Override
    public void run() {
        while (!isStop&&mediaPlayer!=null){
            //給主執行緒發訊息,更新UI
            handler.sendEmptyMessage(mediaPlayer.getCurrentPosition());
        try{
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }