万书网 > 文学作品 > Android从入门到精通 > 第118页

第118页





//弹出消息提示框显示播放完毕



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



}



});



}else{



//弹出消息提示框提示文件不存在



Toast.makeText(this,  "要播放的视频文件不存在",  Toast.LENGTH_SHORT).show();



}

运行本实例,将显示如图10.3所示的运行结果。



图10.3 使用VideoView和MediaController组件播放视频

说明:  由于本实例是在模拟器上运行的,所以并没有显示视频画面,而在屏幕中间显示的图片是为VideoView设置的背景图片。如果将该程序发布到真机上运行,就可以看到视频画面了。

10.1.4 使用MediaPlayer和SurfaceView播放视频

使用MediaPlayer除可以播放音频外,还可以播放视频文件,只不过使用MediaPlayer播放视频时,没有提供图像输出界面。这时,可以使用SurfaceView组件来显示视频图像。使用MediaPlayer和SurfaceView来播放视频,大致可以分为以下4个步骤。

(1)定义SurfaceView组件。定义SurfaceView组件可以在布局管理器中实现,也可以直接在Java代码中创建,不过推荐在布局管理器中定义SurfaceView组件,其基本语法格式如下:




android:id="@+id/ID号"



android:background="背景"



android:keepScreenOn="true|false"



android:layout_width="宽度"



android:layout_height="高度"/>

在上面的语法中,android:keepScreenOn属性用于指定在播放视频时,是否打开屏幕。

例如,在布局管理器中,添加一个ID号为surfaceView1、设置了背景的SurfaceView组件,可以使用下面的代码:




android:id="@+id/surfaceView1"



android:background="@drawable/bg"



android:keepScreenOn="true"



android:layout_width="576px"



android:layout_height="432px"/>

(2)创建MediaPlayer对象,并为其加载要播放的视频。与播放音频时创建MediaPlayer对象一样,也可以使用MediaPlayer类的静态方法create()和无参的构造方法两种方式创建MediaPlayer对象,具体方法请参见10.1.1节。

(3)将所播放的视频画面输出到SurfaceView。使用MediaPlayer对象的setDisplay()方法,可以将所播放的视频画面输出到SurfaceView。setDisplay()方法的语法格式如下:

setDisplay(SurfaceHolder  sh)

参数sh用于指定SurfaceHolder对象,可以通过SurfaceView对象的getHolder()方法获得。例如,为MediaPlayer对象指定输出视频画面的SurfaceView,可以使用下面的代码:

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

(4)调用MediaPlayer对象的相应方法控制视频的播放。使用MediaPlayer对象提供的play()、pause()和stop()方法,可以控制视频的播放、暂停和停止。

下面通过一个具体的实例来说明如何使用MediaPlayer和SurfaceView来播放视频。

例10.4   在Eclipse中创建Android项目,名称为10.4,实现通过MeidaPlayer和SurfaceView播放视频。(实例位置:光盘\TM\sl\10\10.4)

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




android:id="@+id/surfaceView1"



android:background="@drawable/bg"



android:keepScreenOn="true"



android:layout_width="576px"



android:layout_height="432px"/>

(2)打开默认添加的MainActivity,在该类中,声明一个MediaPlayer对象和一个SurfaceView对象,具体代码如下:

private  MediaPlayer  mp;  //声明MediaPlayer对象



private  SurfaceView  sv;  //声明SurfaceView对象

(3)在onCreate()方法中,首先实例化MediaPlayer对象,然后获取布局管理器中添加的SurfaceView组件,再分别获取“播放”按钮、“暂停/继续”按钮和“停止”按钮,具体代码如下:

mp=new  MediaPlayer();        //实例化MediaPlayer对象



sv=(SurfaceView)findViewById(R.id.surfaceView1);  //获取布局管理器中添加的SurfaceView组件



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



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



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

(4)分别为“播放”按钮、“暂停/继续”按钮和“停止”按钮添加单击事件监听器,并在重写的onClick()方法中,实现播放视频、暂停/继续播放视频和停止播放视频等功能,具体代码如下:

//为“播放”按钮添加单击事件监听器



play.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



mp.reset();  //重置MediaPlayer对象



try  {



mp.setDataSource("/sdcard/ccc.mp4");  //设置要播放的视频