web-dev-qa-db-ja.com

Androidで、exoplayerを使用して、デバイスと同じアスペクト比ではないビデオで表面ビューを埋める方法は?

ExoPlayerを使用してビデオを再生するアクティビティがあります。全画面表示にすると、デバイスのアスペクト比がビデオのアスペクト比と同じでない限り、ビデオの上部と下部に小さな黒いバーが表示されます。

これはレイアウトがどのように見えるかです:

<com.google.Android.exoplayer.AspectRatioFrameLayout
    Android:id="@+id/video_frame"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentTop="true"
    Android:layout_alignParentRight="true"
    Android:layout_alignParentBottom="true">

    <SurfaceView Android:id="@+id/surface_view"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_gravity="fill_vertical"/>

    <View Android:id="@+id/shutter"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@Android:color/black"/>

</com.google.Android.exoplayer.AspectRatioFrameLayout>

私はそれを望んでいた

aspectRatioFrameLayout.setAspectRatio(mVideo.getAspectRatio());

問題を解決しますが、私は成功しませんでした。ビデオの一部が画面から切り取られた場合でも、画面をビデオで埋める方法はありますか?

12
kimv

削除 the com.google.Android.exoplayer.AspectRatioFrameLayoutを実行できます。

次に、match_parentに幅と高さのある単純なFrameLayoutを配置します。

SurfaceViewは幅と高さ= match_parentのままである必要があります。

説明:AspectRatioFrameLayoutは、実際のビデオ比率(幅、高さ、pixelRatioに基づいて計算)に従ってビューの正しい高さを設定しています。これを望まない場合でも、Exoplayerは以前と同じようにSurfaceViewにビューを表示できます。 SurfaceView@Overrideでない場合、アスペクト比はありません。

8
Hugo Gresse

画面をビデオで埋める最速の方法があります。 _SimpleExoPlayerView.Java_クラスに移動し、resizeModeを_AspectRatioFrameLayout.RESIZE_MODE_FIT_から_AspectRatioFrameLayout.RESIZE_MODE_FILL_に変更します。 _RESIZE_MODE_FILL_は指定されたアスペクト比を無視します。 ExoPlayerをプロジェクトのモジュールとして使用する場合は、この方法を使用します。

[〜#〜] updated [〜#〜] ExoPlayerをライブラリとして使用する場合、setResizeMode()へのメソッドがあります。ビューで_AspectRatioFrameLayout.RESIZE_MODE_FILL_に設定するだけです:simpleExoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL)以上です。

12
Hien Le Quang

これは、SimpleExoPlayerViewを使用する場合にもXMLで実行できます。

動画のアスペクト比を維持するにはapp:resize_mode="zoom"を追加し、アスペクト比を気にしない場合はapp:resize_mode="fill"を追加します。

<com.google.Android.exoplayer2.ui.SimpleExoPlayerView
            Android:id="@+id/video"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:resize_mode="zoom" />
3
stevyhacker

単にxmlで以下の行を使用します。それは完全に動作します。

app:resize_mode="fill"
0
vishva vijay