第119页
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); //获取“上一首”按钮