1.音乐的播放,暂停,上一曲,下一曲
public class MainActivity extends Activity {
private SeekBar sk;
private TextView tv;
private MediaPlayer mediaPlayer;
private int[] musics;
int h=0;
int i = 5;
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sk = (SeekBar) findViewById(R.id.sk);
tv = (TextView) findViewById(R.id.tv);
musics = new int[] { R.raw.q, R.raw.r, R.raw.s, R.raw.t, R.raw.w,
R.raw.y };
sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
// seekbar停止拖动
public void onStopTrackingTouch(SeekBar seekBar) {
//当没有歌曲播放的时候,拖动拖动条,不能执行
if (mediaPlayer != null) {
// 当用户停止拖动的时,得到seekbar的进度,然后给歌曲设置进度
int progress = sk.getProgress();
// 设置歌曲的当前进度
mediaPlayer.seekTo(progress);
// 开启进度条自动获取进度显示
setSeekbar();
} else {
sk.setProgress(0);
}
}
@Override
// seekbar开始拖动
public void onStartTrackingTouch(SeekBar seekBar) {
// 当用户手动拖动进度条时,seekbar的进度要停止。
//timet计时器停止,进度条就不会获得进度。不会来回跳跃
Cancletimer();
}
@Override
// seekbar进度改变。正在拖动
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// 当拖动的时候,显示的时间随时在改变
// formatData(progress);
// 从当前进度获取到当前seekbar走的时间
formatData(progress);
}
});
}
// 开始
public void start(View v) {
startmusic(i);
}
// 暂停
public void pause(View v) {
pausemusic();
}
// 停止
public void stop(View v) {
stopmusic();
}
// 上一首
public void up(View v) {
stop(v);
--i;
if(i==-1){
i=5;
}
startmusic(i);
}
// 下一首
public void next(View v) {
//此处必须用stop(v)来控制控件的开关,才能使整个视图生效。
stop(v);
++i;
if(i==6){
i=0;
}
startmusic(i);
}
// 开始播放
private void startmusic(int i) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(MainActivity.this, musics[i]);
mediaPlayer.start();
}
mediaPlayer.start();
// 设置进度条
setSeekbar();
//歌曲播放完之后自动播放
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
next(null);
}
});
}
// 暂停播放
private void pausemusic() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
// 停止播放
private void stopmusic() {
//判断当歌曲没有播放时,mediaplayer为空,不能直接点击停止
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
// Cancletimer();
}
}
// 进度条的播放显示
private void setSeekbar() {
// 获取歌曲播放的长度
int duration = mediaPlayer.getDuration();
// 给seekbar设置最大值
sk.setMax(duration);
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
//当点击停止时,mediaplayer为空,会出现空指针
if (mediaPlayer != null) {
// 得到当前进度歌曲
int currentPosition = mediaPlayer.getCurrentPosition();
// 设置进度条
sk.setProgress(currentPosition);
}else {
//设置初始停止时,进度条返回初始状态。
sk.setProgress(0);
}
}
}, 0, 500);
}
private void Cancletimer() {
//当没有点击开始时,
if (timer != null) {
timer.cancel();
}
}
// 格式化毫秒值。设置显示的值
public void formatData(long ss) {
SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss");
Date date = new Date(ss);
String format = dateFormat.format(date);
// format就是格式化好的时间
//
// runOnUiThread(new Runnable() {
//
// @Override
// public void run() {
tv.setText(format);
// }
// });
}
}
本文介绍了一个简单的音乐播放器应用实现方法,重点讲解了如何通过SeekBar控制音乐的播放进度,包括开始、暂停、停止、上下曲切换等功能。
1077

被折叠的 条评论
为什么被折叠?



