这里主要介绍的是SeekBar拖动条和MediaPlayer播放器;
最近项目添加一个音乐播放页面,让用户可以试听警报声,所以实现单曲播放,但是只要单曲可以实现,多曲也非常简单;
首先看下布局文件,在这只复制SeekBar:(其他的布局文件太简单了,如果想看可以下载demo)
<!--
android:max="100" 设置最大进度
android:progress="0" 设置当前进度
android:secondaryProgress="":设置第二进度
android:thumb="": 设置滑动按鈕的图片
android:progressDrawable="":进度条背景图片
-->
<SeekBar
android:id="@+id/seekbar"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:max="100"
android:padding="10dp"
android:progress="0"
android:progressDrawable="@drawable/po_seekbar"
android:thumb="@mipmap/img_point_seekbar" />
SeekBar的背景图片需要自己创建,在drawable文件夹下创建po_seekbar.xml文件:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--进度条北京-->
<item android:id="@android:id/background">
<shape>
<solid android:color="#c3c9d4" />
</shape>
</item>
<!--缓冲背景颜色,没有用到(如果网络加载视频文件可以用到)-->
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<solid android:color="#ff0000" />
</shape>
</clip>
</item>
<!--已加载的背景颜色-->
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="#34b282" />
</shape>
</clip>
</item>
</layer-list>
播放音乐非常简单,按照官方要求初始化MediaPlayer即可:
MediaPlayer mediaPlayer = new MediaPlayer();
//音乐播放完成的监听
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//真实项目中可根据需求更改
}
});
//第一步:重置
mediaPlayer.reset();
//第二步:设置数据源(这里播放的是本地文件,可播放其他文件)
mediaPlayer.setDataSource(activity, musicUri);
//第三步:准备
mediaPlayer.prepare();
//第四步:播放
mediaPlayer.start();
// 获取当前播放的音乐的总时长,当前进度
int duration = mediaPlayer.getDuration();
int currentPosition = mediaPlayer.getCurrentPosition();
//暂停
private void pause() {
if (mediaPlayer != null && mediaPlayer.isPlaying())
//暂停
mediaPlayer.pause();
//停止timer
if (timer != null) {
timer.cancel();
timer = null;
}
}
//继续播放
private void continuePlay() {
if (mediaPlayer != null)
// start();播放、继续播放
mediaPlayer.start();
//继续播放,重新开启timer
getProgressByTimer();
}
再次点击暂停;
实现拖拽播放:
首先给SeekBar设置拖拽监听:
//设置进度改变监听
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//进度改变回调
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
//开始拖拽回调
public void onStartTrackingTouch(SeekBar seekBar) {}
//停止拖拽回调
public void onStopTrackingTouch(SeekBar seekBar) {
//获取当前拖拽的位置
int dragedProgress = seekBar.getProgress();
//记录拖拽的位置
Constants.CURRENT_PROGRESS=dragedProgress;
musicUtils.start();
}
});
当停止拖拽时记录拖拽的位置,MediaPlayer可根据拖拽位置播放;
//拖拽
private void dragPlay() {
if (mediaPlayer != null) {
//播放指定位置
mediaPlayer.seekTo(Constants.CURRENT_PROGRESS);
}
}
我们这里只是为了让用户试听报警音乐,所以并没有过多的逻辑,但是MediaPlayer主要的功能方法都用到了;