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
в нижней части видео.