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();
        }

你可能感兴趣的:(AndroidStudio音乐播放器进度条和歌曲时间的操作)