android studio音乐播放器进度条代码
时间: 2023-06-24 13:08:02 浏览: 74
以下是一个简单的 Android Studio 音乐播放器进度条代码示例,你可以根据自己的需求进行修改:
1. 在布局文件中添加一个 SeekBar 控件和一个 TextView 用于显示当前播放时间和总时间:
```
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/seekbar_progress"
android:thumb="@drawable/seekbar_thumb" />
<TextView
android:id="@+id/timeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="00:00 / 00:00"
android:textSize="14sp" />
```
2. 在 Java 代码中获取 SeekBar 和 TextView 控件的实例,并为 SeekBar 设置 OnSeekBarChangeListener 监听器:
```
SeekBar seekBar = findViewById(R.id.seekBar);
TextView timeTextView = findViewById(R.id.timeTextView);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 更新当前播放时间
long currentTime = (mediaPlayer.getDuration() * progress) / 100;
String currentStr = convertTime(currentTime);
String durationStr = convertTime(mediaPlayer.getDuration());
timeTextView.setText(currentStr + " / " + durationStr);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// 用户开始拖动 SeekBar 时暂停播放器
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// 用户停止拖动 SeekBar 时跳转到指定时间并继续播放
long currentTime = (mediaPlayer.getDuration() * seekBar.getProgress()) / 100;
mediaPlayer.seekTo((int) currentTime);
mediaPlayer.start();
}
});
```
3. 在更新 SeekBar 进度的代码中调用 SeekBar 的 setProgress 方法:
```
// 更新 SeekBar 进度
int progress = (int) (((float) mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration()) * 100);
seekBar.setProgress(progress);
```
4. 定义一个方法用于将毫秒数转换为分:秒格式的字符串:
```
private String convertTime(long time) {
SimpleDateFormat formatter = new SimpleDateFormat("mm:ss", Locale.getDefault());
return formatter.format(new Date(time));
}
```
完整的代码示例:
```
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private TextView timeTextView;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = findViewById(R.id.seekBar);
timeTextView = findViewById(R.id.timeTextView);
// 初始化播放器
mediaPlayer = MediaPlayer.create(this, R.raw.music);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 获取音乐的总时长并设置 SeekBar 的最大值
int duration = mediaPlayer.getDuration();
seekBar.setMax(100);
// 将总时长显示在 TextView 上
String durationStr = convertTime(duration);
timeTextView.setText("00:00 / " + durationStr);
}
});
// 更新 SeekBar 进度
handler.postDelayed(new Runnable() {
@Override
public void run() {
// 如果播放器正在播放,则更新 SeekBar 进度
if (mediaPlayer.isPlaying()) {
int progress = (int) (((float) mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration()) * 100);
seekBar.setProgress(progress);
}
// 每隔 100 毫秒更新一次进度
handler.postDelayed(this, 100);
}
}, 100);
// 设置 SeekBar 的 OnSeekBarChangeListener 监听器
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 更新当前播放时间
long currentTime = (mediaPlayer.getDuration() * progress) / 100;
String currentStr = convertTime(currentTime);
String durationStr = convertTime(mediaPlayer.getDuration());
timeTextView.setText(currentStr + " / " + durationStr);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// 用户开始拖动 SeekBar 时暂停播放器
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// 用户停止拖动 SeekBar 时跳转到指定时间并继续播放
long currentTime = (mediaPlayer.getDuration() * seekBar.getProgress()) / 100;
mediaPlayer.seekTo((int) currentTime);
mediaPlayer.start();
}
});
}
private String convertTime(long time) {
SimpleDateFormat formatter = new SimpleDateFormat("mm:ss", Locale.getDefault());
return formatter.format(new Date(time));
}
@Override
protected void onDestroy() {
super.onDestroy();
// 释放播放器资源
mediaPlayer.release();
}
```
注意:这只是一个简单的示例代码,实际情况可能更复杂,具体实现方式可能会有所不同。