1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android mp3进度条和时间 AndroidStudio音乐播放器进度条和歌曲时间的操作

android mp3进度条和时间 AndroidStudio音乐播放器进度条和歌曲时间的操作

时间:2021-12-27 17:50:45

相关推荐

android mp3进度条和时间 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();

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。