1.将图片设置为圆形
Glide.with(this)
.load(getResources().getDrawable(R.drawable.img_01))
.apply(RequestOptions.circleCropTransform()) // 使用CircleCrop转换为圆形
.into(ivMusic);
2.初始化MediaPlayer并设置播放源
mediaPlayer = MediaPlayer.create(this, R.raw.one);
3.设置SeekBar变化监听(显示音频播放的时间)
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
4.按钮设置
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
rotateImage(); // 启动图片旋转动画
updateSeekBar();
}
});
// 暂停按钮点击事件
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
ivMusic.clearAnimation(); // 停止旋转动画
}
});
5.更新SeekBar的方法
private void updateSeekBar() {
sb.setMax(mediaPlayer.getDuration());
new Thread(() -> {
while (mediaPlayer.isPlaying()) {
runOnUiThread(() -> {
sb.setProgress(mediaPlayer.getCurrentPosition());
tvProgress.setText(formatTime(mediaPlayer.getCurrentPosition()));
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
6.图片旋转动画
private void rotateImage() {
// 使用ObjectAnimator实现旋转动画
ObjectAnimator rotation = ObjectAnimator.ofFloat(ivMusic, "rotation", 0f, 360f);
rotation.setDuration(10000); // 动画持续时间
rotation.setRepeatCount(ObjectAnimator.INFINITE); // 无限循环
rotation.start();
}
7.时间格式化方法
private String formatTime(int milliseconds) {
return String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(milliseconds),
TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
}