ExoPlayer: установите контроллер под видео без перекрытия видео

У меня есть PlayerView который занимает верхнюю половину Activity в портретной ориентации, а нижняя половина экрана показывает некоторый текст.

Мне нужно иметь контроллер под видео без перекрытия видеоконтента (он всегда будет показан). По умолчанию, когда пользователь касается видео, контроллер появляется в нижней части видео, закрывая нижнюю часть видео. В моем случае мне нужно, чтобы контроллер держался под видео без перекрестков с видеоконтентом.

Я прошел через SimpleExoPlayer и API PlayerView но я не нашел способа сделать это.

Вопрос: Как разместить контроллер под видео с помощью 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>

Ответы

Ответ 1

Это подтолкнет элементы управления к нижней части экрана:

<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

Ответ 2

Это может дать вам идею, также вы попытались переопределить элементы управления?

В качестве примера предположим, что мы хотим, чтобы наши элементы управления воспроизведением состояли только из кнопки воспроизведения/паузы, расположенной в центре представления. Мы можем добиться этого, создав файл 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. Использование стандартных идентификаторов требуется, чтобы можно было идентифицировать дочерние представления, привязанные к игроку и соответствующим образом обновленные. Полный список стандартных идентификаторов для каждого вида можно найти в Javadoc для PlaybackControlView и SimpleExoPlayerView. Использование каждого стандартного идентификатора является необязательным.

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

Ответ 3

См. Ответ от @Pierre.
Также, чтобы удалить контроллер сверху PlayerView, в этом случае, @id/video_view, написав player.showController(false) в java файле.
Вы также можете использовать app:use_controller:false в xml.
Таким образом, вы будете единственным видео без контроллера сверху. И привяжите его к новому контроллеру, в этом случае, @id/controls в нижней части видео.