web-dev-qa-db-ja.com

ExoPlayer:ビデオを重ねずに、ビデオの下にコントローラーを配置します

画面の下半分にテキストが表示された状態で、アクティビティの上半分を縦向きで占めるPlayerViewがあります。

コントローラが必要ですビデオの下にビデオコンテンツを重ねずに(常に表示されます)。デフォルトでは、ユーザーが動画に触れると、コントローラーが動画の下部に表示され、動画の下部が覆われます。私の場合、ビデオコンテンツと交差しないように、コントローラーをビデオの下に固定する必要があります。

私はSimpleExoPlayerおよびPlayerView AP​​Iを試してみましたが、それを行う方法が見つかりませんでした。

質問: ExoPlayerでビデオの下にコントローラーを配置するにはどうすればよいですか?

レイアウトは次のようになります。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <com.google.Android.exoplayer2.ui.PlayerView
        Android:id="@+id/video_view"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"/>

    <TextView
        Android:id="@+id/text"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentStart="true"
        Android:layout_below="@id/video_view"
        Android:scrollbars="vertical" />

</RelativeLayout>
16
Sasha Shpota

これにより、コントロールが画面の下部にプッシュされます。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <com.google.Android.exoplayer2.ui.PlayerView
        Android:id="@+id/video_view"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:use_controller="false" />

    <com.google.Android.exoplayer2.ui.PlayerControlView
        Android:id="@+id/controls"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_below="@id/video_view"
        app:show_timeout="0" />

</RelativeLayout>

次にJavaで:

PlayerView videoView = findViewById(R.id.video_view);
PlayerControlView controls = findViewById(R.id.controls);
controls.setPlayer(videoView);

編集:@ RashimiGautamからの提案に対する私の回答を変更

16
Pierre

@ Pierreによる回答を参照してください。
また、コントローラを上記のPlayerViewから削除するには、player.showController(false)をJavaファイルに書き込むことにより、@id/video_viewを使用します。
xmlでapp:use_controller:falseを使用することもできます。
そのため、コントローラが上にない唯一のビデオになります。そして、それを新しいコントローラーにリンクします。その場合、ビデオの下部にある@id/controlsです。

6
Rashmi Gautam

これはあなたにアイデアを与えるかもしれませんし、あなたにも コントロールをオーバーライドしようとしました

例として、再生コントロールをビューの中央に配置された再生/一時停止ボタンのみで構成するとします。これは、exo_playback_control_view.xmlアプリケーションのres/layoutディレクトリにあるファイル。

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

  <ImageButton Android:id="@id/exo_play"
      Android:layout_width="100dp"
      Android:layout_height="100dp"
      Android:layout_gravity="center"
      Android:background="#CC000000"
      style="@style/ExoMediaButton.Play"/>

  <ImageButton Android:id="@id/exo_pause"
      Android:layout_width="100dp"
      Android:layout_height="100dp"
      Android:layout_gravity="center"
      Android:background="#CC000000"
      style="@style/ExoMediaButton.Pause"/>

</FrameLayout>

レイアウト@id/exo_playおよび@id/exo_pauseは、ExoPlayerライブラリによって定義された標準のIDです。子ビューを識別してプレーヤーにバインドし、適切な方法で更新できるようにするには、標準IDを使用する必要があります。各ビューの標準IDの完全なリストは、Javadocの PlaybackControlView および SimpleExoPlayerView にあります。各標準IDの使用はオプションです。

https://medium.com/google-exoplayer/customizing-exoplayers-ui-components-728cf55ee07a

3