乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第119页

书籍名:《Android从入门到精通》    作者:明日科技




mp.setDisplay(sv.getHolder());  //设置将视频画面输出到SurfaceView



mp.prepare();  //预加载视频



mp.start();  //开始播放



sv.setBackgroundResource(R.drawable.bg_playing);  //改变SurfaceView的背景图片



pause.setText("暂停");



pause.setEnabled(true);  //设置“暂停”按钮可用



}  catch  (IllegalArgumentException  e)  {



e.printStackTrace();



}  catch  (SecurityException  e)  {



e.printStackTrace();



}  catch  (IllegalStateException  e)  {



e.printStackTrace();



}  catch  (IOException  e)  {



e.printStackTrace();



}



}



});



//为“停止”按钮添加单击事件监听器



stop.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



if(mp.isPlaying()){



mp.stop();  //停止播放



sv.setBackgroundResource(R.drawable.bg_finish);  //改变SurfaceView的背景图片



pause.setEnabled(false);  //设置“暂停”按钮不可用



}



}



});



//为“暂停”按钮添加单击事件监听器



pause.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



if(mp.isPlaying()){



mp.pause();  //暂停视频的播放



((Button)v).setText("继续");



}else{



mp.start();  //继续视频的播放



((Button)v).setText("暂停");



}



}



});

(5)为MediaPlayer对象添加完成事件监听器,在重写的onCompletion()方法中改变SurfaceView的背景图片并弹出消息提示框显示视频已经播放完毕,具体代码如下:

mp.setOnCompletionListener(new  OnCompletionListener()  {



@Override



public  void  onCompletion(MediaPlayer  mp)  {



sv.setBackgroundResource(R.drawable.bg_finish);  //改变SurfaceView的背景图片



Toast.makeText(MainActivity.this,  "视频播放完毕!",  Toast.LENGTH_SHORT).show();



}



});

(6)重写Activity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的视频,并释放MediaPlayer所占用的资源,具体代码如下:

@Override



protected  void  onDestroy()  {



if(mp.isPlaying()){



mp.stop();  //停止播放视频



}



mp.release();  //释放资源



super.onDestroy();



}

运行本实例,单击“播放”按钮,将开始播放视频,并且“暂停”按钮变为可用,如图10.4所示;单击“暂停”按钮,将暂停视频的播放,同时该按钮变为“继续”按钮;单击“停止”按钮,将停止正在播放的视频。



图10.4 使用MediaPlayer和SurfaceView播放视频

10.1.5 范例1:播放SD卡上的全部音频文件

例10.5   在Eclipse中创建Android项目,名称为10.5,实现播放SD卡上的全部音频文件。(实例位置:光盘\TM\sl\10\10.5)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后在默认添加的线性布局管理器中添加一个ListView组件,用于显示获取到的音频列表;添加一个水平线性布局管理器,并在该水平线性布局管理器中添加5个按钮,分别为“上一首”按钮、“播放”按钮、“暂停/继续”按钮、“停止”按钮和“下一首”按钮,其中“暂停/继续”按钮默认为不可用,关键代码如下:




android:id="@+id/list"



android:layout_width="fill_parent"



android:layout_height="fill_parent"



android:layout_weight="1"



android:drawSelectorOnTop="false"/>

(2)打开默认添加的MainActivity,在该类中,声明程序中所需的成员变量,具体代码如下:

private  MediaPlayer  mediaPlayer;     //声明MediaPlayer对象



private  List  audioList  =  new  ArrayList();  //要播放的音频列表



private  int  currentItem  =  0;     //当前播放歌曲的索引



private  Button  pause;       //声明一个“暂停”按钮对象

(3)在onCreate()方法中,首先实例化MediaPlayer对象,然后获取布局管理器中添加的“上一首”按钮、“播放”按钮、“暂停/继续”按钮、“停止”按钮和“下一首”按钮,再调用audioList()方法在ListView组件上显示全部音频,具体代码如下:

mediaPlayer  =  new  MediaPlayer();  //实例化一个MediaPlayer对象



Button  play  =  (Button)  findViewById(R.id.play);  //获取“播放”按钮



Button  stop  =  (Button)  findViewById(R.id.stop);  //获取“停止”按钮



pause  =  (Button)  findViewById(R.id.pause);  //获取“暂停/继续”按钮



Button  pre  =  (Button)  findViewById(R.id.pre);  //获取“上一首”按钮