作者:刘昊昱

博客:http://blog.csdn.net/liuhaoyutz

在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频。

一、使用VideoView类播放视频

要使用VideoView类播放视频,首先要在布局文件中添加VideoView组件,然后在Activity中获取该组件,并使用VideoView.setVideoPath()或VideoView.setVideoURI()方法加载需要播放的视频,最后调用start()方法播放视频。VideoView类还提供了stop()和pause()方法,用于停止或暂停视频播放。

在布局文件中添加VideoView组件的基本语法格式如下:

<VideoView

属性列表>

</VideoView>

Android还提供了一个与VideoView组件结合使用的MediaController组件。MediaController组件用于通过图形控制界面来控制视频的播放。

下面我们来看一个使用VideoView和MediaController组件播放视频的例子,由于在模拟器上播放不了视频,所以这里就不上图了,我在真机上验证过可以播放视频,直接看代码:

先来看主布局文件main.xml,其内容如下:

<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <VideoView        android:id="@+id/video"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center" /> </LinearLayout>


下面看主Activity文件,其内容如下:

package com.liuhaoyu; import java.io.File; import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.widget.MediaController;import android.widget.Toast;import android.widget.VideoView; public classMainActivity extends Activity {    private VideoView video;      /** Called when the activity is firstcreated. */   @Override   publicvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);               video=(VideoView) findViewById(R.id.video);        File file=new File("/sdcard/1.mp4");        MediaController mc=newMediaController(MainActivity.this);       // 创建一个MediaController对象        if(file.exists()){        video.setVideoPath(file.getAbsolutePath());        video.setMediaController(mc);       // 将VideoView与MediaController关联起来        video.requestFocus();       // 设置VideoView获取焦点        try {                video.start();      // 播放视频            }catch(Exception e) {                e.printStackTrace();            }               // 设置VideoView的Completion事件监听器        video.setOnCompletionListener(new OnCompletionListener(){                             @Override                public voidonCompletion(MediaPlayer mp) {                    Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();                }            });        }else{        Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();        }   }}


二、 使用MediaPlayer播放视频

MediaPlayer不但可以播放音乐,也可以播放视频,但是MediaPlayer没有提供视频输出界面,所以,用MediaPlayer播放视频需要和SurfaceView组件配合使用,其主要流程如下:

(1)、在布局文件中插入SurfaceView组件,其语法格式如下:

<SurfaceView

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

android:background=”背景”

android:keepScreenOn=”true|false”

android:layout_width=”宽度”

android:layout_height=”高度” />

(2)、创建MediaPlayer对象,并加载要播放的视频。加载视频的方法和上一篇文章中介绍的加载音频的方法一样,这里不再详述。

(3)、将视频画面输出到SurfaceView,语法格式如下:

MediaPlayer.setDisplay(SurfaceHolder sh)

参数sh用于指定SurfaceHolder对象,可以通过SurfaceView.getHolder()方法获得。

(4)、调用MediaPlayer的play()、stop()、pause()等方法控制视频播放。

下面来看一个例子:

先来看主布局文件,其内容如下:

<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:gravity="center"    android:orientation="vertical" >    <SurfaceView        android:id="@+id/surfaceView1"        android:keepScreenOn="true"        android:layout_width="576px"        android:layout_height="432px"/>    <LinearLayout        android:id="@+id/linearLayout1"        android:layout_width="wrap_content"        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:text="停止" />   </LinearLayout> </LinearLayout>


下面我们看主Activity文件,其内容如下:

package com.liuhaoyu; import java.io.IOException; import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast; public classMainActivity extends Activity {    private MediaPlayer mp;    private SurfaceView sv;   @Override   publicvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mp=new MediaPlayer();        sv=(SurfaceView)findViewById(R.id.surfaceView1);        Button play=(Button)findViewById(R.id.play);        final Button pause=(Button)findViewById(R.id.pause);        Button stop=(Button)findViewById(R.id.stop);              play.setOnClickListener(new OnClickListener() {                       @Override            public void onClick(View v) {                mp.reset();                try {                    mp.setDataSource("/sdcard/1.mp4");                    mp.setDisplay(sv.getHolder());                    mp.prepare();                    mp.start();                    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();                    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("暂停");                }                           }        });               mp.setOnCompletionListener(new OnCompletionListener(){                       @Override            public voidonCompletion(MediaPlayer mp) {                Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();            }        });          }    @Override    protected void onDestroy() {        if(mp.isPlaying()){            mp.stop();        }        mp.release();        super.onDestroy();    }   }


更多相关文章

  1. Android四大组件生命周期,组件类的继承与实现,Context
  2. Android(安卓)FFmpeg系列——6 Java 获取播放进度
  3. android中画廊视图Gallery和ImageSwitcher组件的使用
  4. 【Android(安卓)并发编程】android系统架构和四大组件详解
  5. Android:Preference
  6. Android音视频编码录制mp4
  7. Android官方架构组件LifeCycle详解
  8. Android移动端自动化测试从入门到实战(Java篇)UIAutomator,Robotium
  9. Android(安卓)三种播放视频的方式

随机推荐

  1. Android滑动动画ViewFlipper简单使用
  2. [Android]开源中国源码分析——Activity
  3. react-native 0.62 fetch请求上传图片失
  4. Android(安卓)实现推送功能
  5. TQ210搭载Android(安卓)4.0.3测试Google
  6. android在Fragment中使用ListView显示数
  7. 获得android 应用的版本和当前android系
  8. Android:Chip、ChipGroups、ChipDrawable
  9. android MotionEvent 获取长按压时间长
  10. 支付宝小程序(ble 适配android和ios) 入