布局文件
android:id="@+id/view_music_seek"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1" />
java文件
(1)遍历出所有音乐资源
public static String[] getAssetsFiles(Activity activity, String assetsName) {
String[] subFile = null;
try {
subFile = activity.getAssets().list(assetsName);
} catch (IOException e) {
e.printStackTrace();
Mxg.d(TAG, e.getMessage());
}
return subFile;
}
(2)初始化音乐播放及控制音乐暂停等操作
musicArr = getAssetsFiles();
mediaPlayer = new MediaPlayer();
播放
mediaPlayer.reset();
AssetFileDescriptor afd = activity.getAssets().openFd(assetsName+ "/" + musicArr[playIndex]);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mediaPlayer.prepare();
mediaPlayer.start();
暂停
mediaPlayer.pause();
停止
mediaPlayer.stop();
(3)播放时更新进度条进度
progressTask.postDelayed(progressRun, 500);
private Handler progressTask = new Handler();
private Runnable progressRun = new Runnable() {
@Override
public void run() {
if (isPlay) {
int current = mediaPlayer.getCurrentPosition();
sbMusic.setProgress(current);
tvTime.setText(Utils.secondToDateStr(current / 1000));
progressTask.postDelayed(this, 500);
}
}
};
(4)滑动进度条控制音乐进度
sbMusic.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//是否触碰修改音乐进度,如果不加这个判断,音乐会卡顿
private boolean isTouchChange = false;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//判断是否播放中及是否是手指拖动
//如果不适用istouchchange 音乐会卡顿 因为播放的时候进度条也会动
if (isPlay && isTouchChange) {
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
isTouchChange = true;
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
isTouchChange = false;
}
});