一、建立android项目
二、打开XML文件,
(1)修改新建项目的res/layout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后在默认添加的线性布局管理器中添加一个SurfaceView组件用于显示视频图像,和一个水平线性布局管理器,并在该水平线性布局管理器中,添加3个按钮,分别为“播放”按钮、“暂停/继续”按钮和“停止”按钮,循环按钮关键代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"/>
<SurfaceView
android:id="@+id/surfaceView1"
android:layout_width="264dp"
android:layout_height="234dp"
android:keepScreenOn="true" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放" />
<Button
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="暂停" />
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="停止" />
<Button
android:id="@+id/replay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="循环"/>
LinearLayout>
RelativeLayout>
结果如下图所示:
(2)打开默认添加的MainActivity,在该类中,声明一个MediaPlayer对象和一个SurfaceView对象,具体代码如下:
privateMediaPlayer mp; //声明MediaPlayer对象
privateSurfaceView sv; //声明SurfaceView对象
(3)在onCreate()方法中,首先实例化MediaPlayer对象,然后获取布局管理器中添加的SurfaceView组件,最后再分别获取“播放”按钮、“暂停/继续”按钮和“停止”按钮,具体代码如下:
final String filestr=Environment.getExternalStorageDirectory().getPath()+"/video/demo.mp4";
TextView t1=(TextView) findViewById(R.id.textView1); //获取VideoView组件
t1.setText(filestr);
mp=new MediaPlayer();//实例化MediaPlayer对象
sv=(SurfaceView)findViewById(R.id.surfaceView1);//获取布局管理器中添加的SurfaceView组件
final Button play=(Button)findViewById(R.id.play);//获取“播放”按钮
final Button pause=(Button)findViewById(R.id.pause);//获取“暂停/继续”按钮
final Button stop=(Button)findViewById(R.id.stop);//获取“停止”按钮
final Button replay=(Button)findViewById(R.id.replay);//获取“循环”按钮
(4)分别为“播放”按钮、“暂停/继续”按钮和“停止”按钮添加单击事件监听器,并在重写的onClick()方法中,实现播放视频、暂停/继续播放视频和停止播放视频等功能,具体代码如下:
//为“播放”按钮添加单击事件监听器
play.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
mp.reset(); //重置MediaPlayer对象
try {
mp.setDataSource(filestr);//设置要播放的视频
mp.setDisplay(sv.getHolder());//设置将视频画面输出到SurfaceView
mp.prepare(); //预加载视频
mp.start(); //开始播放
play.setEnabled(false);//设置“暂停”按钮可用
pause.setEnabled(true);//设置“暂停”按钮可用
stop.setEnabled(true);//设置“暂停”按钮可用
replay.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();//停止播放
pause.setEnabled(false); //设置“暂停”按钮不可用
play.setEnabled(true);//设置“暂停”按钮可用
}
}
});
//为“暂停”按钮添加单击事件监听器
pause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying()){
mp.pause(); //暂停视频的播放
replay.setEnabled(true);
((Button)v).setText("继续");
}else{
mp.start(); //继续视频的播放
((Button)v).setText("暂停");
}
}
});
//为“停止”按钮添加单击事件监听器
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying()){
mp.stop();//停止播放
pause.setEnabled(false); //设置“暂停”按钮不可用
play.setEnabled(true);//设置“暂停”按钮可用
}
}
});
//为“暂停”按钮添加单击事件监听器
pause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying()){
mp.pause(); //暂停视频的播放
((Button)v).setText("继续");
}else{
mp.start(); //继续视频的播放
((Button)v).setText("暂停");
}
}
});
mp.setOnCompletionListener(newOnCompletionListener() {
@Override
public voidonCompletion(MediaPlayer mp) {
Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();
play.setEnabled(true);//设置“播放”按钮可用
pause.setEnabled(false); //设置“暂停”按钮不可用
stop.setEnabled(false); //设置“停止”按钮不可用
}
});
//为“循环”按钮添加单击事件监听器
replay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mp.reset(); //重置MediaPlayer对象
try {
mp.setDataSource(filestr);//设置要播放的视频
mp.setDisplay(sv.getHolder());//设置将视频画面输出到SurfaceView
mp.prepare(); //预加载视频
mp.setLooping(true);
mp.start(); //开始播放
replay.setEnabled(false);//设置“暂停”按钮可用
pause.setEnabled(true);//设置“暂停”按钮可用
stop.setEnabled(true);//设置“暂停”按钮可用
} catch(IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityExceptione) {
e.printStackTrace();
} catch(IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
(5)为MediaPlayer对象添加完成事件监听器,在重写的onCompletion()方法中改变SurfaceView的背景图片并弹出消息提示框显示视频已经播放完毕,具体代码如下:
mp.setOnCompletionListener(newOnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();
play.setEnabled(true);//设置“播放”按钮可用
pause.setEnabled(false); //设置“暂停”按钮不可用
stop.setEnabled(false); //设置“停止”按钮不可用
}
});
(6)重写Acitivity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的视频,并释放MediaPlayer所占用的资源,具体代码如下:
@Override
protected void onDestroy() {
if(mp.isPlaying()){
mp.stop(); //停止播放视频
}
mp.release();//释放资源
super.onDestroy();
}
运行结果如下图所示
当然视频资源是需要自己添加的
首先打开eclipse的DDMS
如下图所示