废话不多说上代码
private AudioManager audioManager;
private SimpleDateFormat format;
private SeekBar seekBar;
private TextView musicLength;
private TextView musicCur;
private MediaPlayer mediaPlayer = new MediaPlayer();
private ImageButton play;
private ImageButton pause;
private ImageButton stop;
private Timer timer;
private boolean isSeekBarChanging;//互斥变量,防止进度条与定时器冲突。
private int currentPosition = 0;//当前音乐播放的进度
private ImageView mDynamicCircle;
private ObjectAnimator mCircleAnimator;
private ImageView mDynamicCircle1;
private ImageView mMp3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_start);
audioManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
findViewById(R.id.iv_goback).setonClickListener(new View.onClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
format = new SimpleDateFormat("mm:ss");
musicLength = (TextView) findViewById(R.id.music_length);
musicCur = (TextView) findViewById(R.id.music_cur);
seekBar = (SeekBar) findViewById(R.id.seekBar);
seekBar.setonSeekBarChangeListener(new MySeekBar());
play = (ImageButton) findViewById(R.id.play);
pause = (ImageButton) findViewById(R.id.pause);
stop = (ImageButton) findViewById(R.id.stop);
play.setonClickListener(this);
pause.setonClickListener(this);
stop.setonClickListener(this);
donghua();
donghua2();
initMediaPlayer();//初始化mediaplayer
}
private void donghua(){
mDynamicCircle = (ImageView) findViewById(R.id.cdbg);
mCircleAnimator = ObjectAnimator.ofFloat(mDynamicCircle, "rotation", 0.0f, 360.0f);
mCircleAnimator.setDuration(6000);
mCircleAnimator.setInterpolator(new LinearInterpolator());
mCircleAnimator.setRepeatCount(-1);
mCircleAnimator.setRepeatMode(ObjectAnimator.RESTART);
}
private void donghua2(){
mDynamicCircle1 = (ImageView) findViewById(R.id.cdbg1);
mMp3 = (ImageView) findViewById(R.id.cdbg2);
mMp3.setonClickListener(new View.onClickListener() {
@Override
public void onClick(View view) {
if (!mediaPlayer.isPlaying()) {
paly();
}else {
mCircleAnimator.pause();
mDynamicCircle1.startAnimation(rotateAnimation1);
mediaPlayer.pause();//暂停播放
pause.setBackgroundResource(R.drawable.cdbgbut);
}
}
});
}
private void initMediaPlayer() {
try {
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/eBook/朴树+-+平凡之路.mp3");//指定音频文件的路径
mediaPlayer.prepare();//让mediaplayer进入准备状态
mediaPlayer.setLooping(true);
mediaPlayer.setonPreparedListener(new MediaPlayer.onPreparedListener() {
public void onPrepared(MediaPlayer mp) {
seekBar.setMax(mediaPlayer.getDuration());
musicLength.setText(format.format(mediaPlayer.getDuration())+"");
musicCur.setText("00:00");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
initMediaPlayer();
} else {
Toast.makeText(MusicStartActivity.this,"denied access",Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
}
}
private void paly(){
pause.setBackgroundResource(R.drawable.cdztbut);
mDynamicCircle1.startAnimation(rotateAnimation);
mCircleAnimator.start();
mediaPlayer.start();//开始播放
mediaPlayer.seekTo(currentPosition);
//监听播放时回调函数
timer = new Timer();
timer.schedule(new TimerTask() {
Runnable updateUI = new Runnable() {
@Override
public void run() {
musicCur.setText(format.format(mediaPlayer.getCurrentPosition())+"");
}
};
@Override
public void run() {
if(!isSeekBarChanging){
seekBar.setProgress(mediaPlayer.getCurrentPosition());
runonUiThread(updateUI);
}
}
},0,50);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.play:
// if (!mediaPlayer.isPlaying()) {
// paly();
// }
break;
case R.id.pause:
if (mediaPlayer.isPlaying()) {
mCircleAnimator.pause();
mDynamicCircle1.startAnimation(rotateAnimation1);
mediaPlayer.pause();//暂停播放
pause.setBackgroundResource(R.drawable.cdbgbut);
}else {
paly();
}
break;
case R.id.stop:
// if (mediaPlayer.isPlaying()) {
// mediaPlayer.reset();//停止播放
// mCircleAnimator.end();
// mDynamicCircle1.startAnimation(rotateAnimation1);
// currentPosition = 0;
// initMediaPlayer();
// }
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
isSeekBarChanging = true;
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
if (timer != null){
timer.cancel();
timer = null;
}
}
public class MySeekBar implements SeekBar.onSeekBarChangeListener {
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
public void onStartTrackingTouch(SeekBar seekBar) {
isSeekBarChanging = true;
}
public void onStopTrackingTouch(SeekBar seekBar) {
isSeekBarChanging = false;
currentPosition = seekBar.getProgress();
mediaPlayer.seekTo(seekBar.getProgress());
}
}
布局文件



