seekbar就是通常的进度条,在播放器中使用seekbar可以随时查看带播放进度,还可以自己控制进度,因而seekbar是Mediaplayer播放的一个很好的工具, 这里写了个简单功能的实例。
xml 文件内容很简单:
java代码实现
新建一个空的MediaPlayer对象用于播放,一个TextView作为播放状态的文本显示。
并设置两个bool变量作为状态标志,线程控制需要的Hnadler对象
新建三个imagebutton 用于实现播放控制操作并设置监听:开始,暂停,停止。
相应按钮点击事件:
初始化线程对象
新建一个类实现Seekbar的事件监听:
因为MediaPlayer类没有播放进度的回调方法,所以需要设置一个线程实现实时刷新:
以上就完成了一个简单的带进度控制的播放程序。
xml 文件内容很简单:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:id="@+id/mediaplay_textview"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="Hello!">
-
- </TextView>
- <SeekBar
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/mediaplay_seekbar">
- </SeekBar>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <ImageButton
- android:id="@+id/start"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/h"
- ></ImageButton>
- <ImageButton
- android:id="@+id/pause"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/i"
- ></ImageButton>
- <ImageButton
- android:id="@+id/stop"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/j"
- ></ImageButton>
- </LinearLayout>
- </LinearLayout>
新建一个空的MediaPlayer对象用于播放,一个TextView作为播放状态的文本显示。
并设置两个bool变量作为状态标志,线程控制需要的Hnadler对象
- private MediaPlayer mediaplayer=null;
- private TextView textview;
- private SeekBar seekbar;
- boolean isPaused=false,isChanging=false;
- private Handler handler;
新建三个imagebutton 用于实现播放控制操作并设置监听:开始,暂停,停止。
- mediaplayer=new MediaPlayer();
- textview=(TextView)findViewById(R.id.mediaplay_textview);
- seekbar=(SeekBar)findViewById(R.id.mediaplay_seekbar);
- ImageButton start=(ImageButton)findViewById(R.id.start);
- ImageButton pause=(ImageButton)findViewById(R.id.pause);
- ImageButton stop=(ImageButton)findViewById(R.id.stop);
- seekbar.setOnSeekBarChangeListener(new SeekBarChangeEvent());
- start.setOnClickListener(this);
- pause.setOnClickListener(this);
- stop.setOnClickListener(this);
- }
- public void onClick(View v) {
- // TODO Auto-generated method stub
- switch (v.getId()){
- case R.id.start:
- if(mediaplayer!=null){
- Log.v("1","1");
- mediaplayer.reset();
- //将media重置,回到未初始话状态
- mediaplayer=MediaPlayer.create(this, R.raw.g);
- //初始化media对象,g为多媒体资源(mp3)
- }else{
- mediaplayer=MediaPlayer.create(this, R.raw.g);
- Log.v("2","2");
- }
- seekbar.setMax(mediaplayer.getDuration());
- //将进度条的最大长度设置为媒体文件的播放时间,便于两者的同步
- // m.setAudioStreamType(AudioManager.STREAM_MUSIC);
- // m.setDisplay(surfaceHolder);//设置屏幕
- mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
- //设置媒体资源播放完毕监听
- @Override
- public void onCompletion(MediaPlayer arg0) {
- // TODO Auto-generated method stub
- // mediaplayer.release();
- Log.v("complete","complete");
- textview.setText("play end!");
- }
- });
- mediaplayer.start();
- textview.setText("playing..");
- break;
- case R.id.pause:
- if(mediaplayer!=null){
- if(isPaused){
- mediaplayer.start();
- isPaused=false;
- textview.setText("playing..");
- }else{
- mediaplayer.pause();
- isPaused=true;
- textview.setText("pausing..");
- }
- }
- break;
- case R.id.stop:
- if(mediaplayer!=null){
- mediaplayer.stop();
- isPaused=false;
- textview.setText("stop");
- Log.v("3","3");
- }
- break;
- }
- handler=new Handler(){
- public void handleMessage(Message msg){
- seekbar.setProgress(mediaplayer.getCurrentPosition());
- }
- };//实现消息传递
- DelayThread delaythread=new DelayThread(100);
- delaythread.start();
- class SeekBarChangeEvent implements OnSeekBarChangeListener{
- @Override
- public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onStartTrackingTouch(SeekBar arg0) {
- //开始拖动进度条
- // TODO Auto-generated method stub
- isChanging=true;
- }
- @Override
- public void onStopTrackingTouch(SeekBar arg0) {
- //停止拖动进度条
- // TODO Auto-generated method stub
- mediaplayer.seekTo(arg0.getProgress());
- //将media进度设置为当前seekbar的进度
- isChanging=false;
- }
- }
-
- class DelayThread extends Thread{
- int milliseconds;
- public DelayThread(int i){
- milliseconds=i;
- }
- public void run(){
- while(true){
- try {
- sleep(milliseconds);
- //设置音乐进度读取频率
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- handler.sendEmptyMessage(0);
- }
- }
-
- }