【Android】VideoViewを使って動画再生アプリを作る④
-- 全画面で動画再生 --

いよいよVideoViewを使って動画ファイルを再生する部分です。

実装

アプリケーションのタイトルバーを消す

まずは全画面で表示させるために、アプリケーションのタイトルバーを消します。これにはAndroidManifest.xmlのActivityのテーマ指定を以下のようにします。

AndroidManifest.xml

<activity
    android:name=".Mp4Activity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" />

ナビゲーションバーを消す

次に下段のナビゲーションバー(戻るボタンやホームボタンのバー)を消します。これはActivity内のコードで以下のように制御します。

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);

動画再生

Intentで受け取ったファイルパスをVideoViewに読み込みます。

読み込みの完了をOnPreparedListnerより受け取り、再生を開始します。その際に動画縦幅と横幅を比べて横長の動画の場合、画面の向きを変えて最大サイズで再生できるようにしています。

String path = getIntent().getStringExtra("path");
videoView = findViewById(R.id.videoView);
videoView.setVideoPath(path);

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        if (mediaPlayer.getVideoWidth() > mediaPlayer.getVideoHeight()) {
            // 横表示にする
            Mp4Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        } else {
            // 縦表示にする
            Mp4Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        videoView.start();
    }
});

最後まで再生したらリピートさせる

動画の再生完了をOnCompletionListenerにより受け取り、リピート処理を行います。

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
    @Override
    public void onCompletion(MediaPlayer mp) {
        videoView.seekTo(0);
        videoView.start();
    }
});

動作確認

ちょっと分かりにくいですが、横幅の大きい動画を向きを変えて再生しているのがわかると思います。

まとめ

ここまで作ってきました動画再生アプリのまとめです。

作り方解説記事

アプリケーション

https://play.google.com/store/apps/details?id=com.swapps.mp4viewer

ソースコード

https://github.com/s-watanabe-apps/mp4-viewer.git

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)