播放視頻文件其實並不比播放音頻文件複雜,主要是使用 VideoView 類來實現的。這個 類將視頻的顯示和控制集於一身,使得咱們僅僅藉助它就能夠完成一個簡易的視頻播放器。 VideoView 的用法和 MediaPlayer 也比較相似,主要有如下經常使用方法:android
方法名ide |
功能描述工具 |
setVideoPath()佈局 |
設置要播放的視頻文件的位置。學習 |
start()動畫 |
開始或繼續播放視頻。this |
pause()spa |
暫停播放視頻。視頻 |
resume()xml |
將視頻重頭開始播放。 |
seekTo() |
從指定的位置開始播放視頻。 |
isPlaying() |
判斷當前是否正在播放視頻。 |
getDuration() |
獲取載入的視頻文件的時長。 |
那麼咱們仍是經過一個實際的例子來學習一下吧,新建 PlayVideoTest 項目,而後修改
activity_main.xml 中的代碼,以下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" >
<VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" >
<Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Play" />
<Button android:id="@+id/pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Pause" />
<Button android:id="@+id/replay" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Replay" />
</LinearLayout>
</LinearLayout>
在這個佈局文件中,首先是放置了一個 VideoView,稍後的視頻就將在這裏顯示。而後在 VideoView 的下面又放置了三個按鈕,分別用於控制視頻的播放、暫停和從新播放。 接下來修改 MainActivity 中的代碼,以下所示:
public class MainActivity extends Activity implements OnClickListener {
private VideoView videoView;
private Button play; private Button pause; private Button replay;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
play = (Button) findViewById(R.id.play);
pause = (Button) findViewById(R.id.pause);
replay = (Button) findViewById(R.id.replay);
videoView = (VideoView) findViewById(R.id.video_view); play.setOnClickListener(this); pause.setOnClickListener(this); replay.setOnClickListener(this);
initVideoPath();
}
private void initVideoPath() {
File file = new File(Environment.getExternalStorageDirectory(), "movie.3gp");
videoView.setVideoPath(file.getPath()); // 指定視頻文件的路徑
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
if (!videoView.isPlaying()) {
videoView.start(); // 開始播放
}
break;
case R.id.pause:
if (videoView.isPlaying()) {
videoView.pause(); // 暫時播放
}
break;
case R.id.replay:
if (videoView.isPlaying()) {
videoView.resume(); // 從新播放
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (videoView != null) {
videoView.suspend();
}
}
}
這部分代碼相信你理解起來會很輕鬆,由於它和前面播放音頻的代碼很是相似。首先在 onCreate()方法中仍然是去獲取一些控件的實例,而後調用了 initVideoPath()方法來設置視頻 文件的路徑,這裏咱們須要事先在 SD 卡的根目錄下放置一個名爲 movie.3gp 的視頻文件。 下面看一下各個按鈕的點擊事件中的代碼。當點擊 Play 按鈕時會進行判斷,若是當前 並無正在播放音頻,則調用 start()方法開始播放。當點擊 Pause 按鈕時會判斷,若是當前 視頻正在播放,則調用 pause()方法暫時播放。當點擊 Replay 按鈕時會判斷,若是當前視頻正在播放,則調用 resume()方法重頭播放視頻。最後在 onDestroy()方法中,咱們還須要調用一下 suspend()方法,將 VideoView 所佔用的 資源釋放掉。
如今將程序運行到手機上,而後點擊一下 Play 按鈕,就能夠看到視頻已經開始播放了, 如圖 8.20 所示。
圖 8.20
點擊 Pause 按鈕能夠暫停視頻的播放,點擊 Replay 按鈕能夠重頭播放視頻。 這樣的話,你就已經將 VideoView 的基本用法掌握得差很少了。不過,爲何它的用法
和 MediaPlayer 這麼類似呢?其實 VideoView 只是幫咱們作了一個很好的封裝而已,它的背 後仍然是使用 MediaPlayer 來對視頻文件進行控制的。另外須要注意,VideoView 並非一 個萬能的視頻播放工具類,它在視頻格式的支持以及播放效率方面都存在着較大的不足。所 以,若是想要僅僅使用 VideoView 就編寫出一個功能很是強大的視頻播放器是不太現實的。 可是若是隻是用於播放一些遊戲的片頭動畫,或者某個應用的視頻宣傳,使用 VideoView 還 是綽綽有餘的。