ExoPlayer:将控制器放在视频下方而不与视频重叠

ExoPlayer: Place controller under the video without overlapping the video

我有一个 PlayerView,它占据了纵向 Activity 的上半部分,屏幕的下半部分显示了一些文本。

我需要在视频下方放置控制器,而不与视频内容重叠(它将始终显示)。默认情况下,当用户触摸视频时,控制器会出现在视频底部,覆盖视频的底部。我的情况是,我需要控制器贴在视频下方,与视频内容没有交集。

我查看了 SimpleExoPlayerPlayerView API,但我还没有找到任何方法。

问题:如何使用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>

这可能会给你一个想法,你也有吗

例如,假设我们希望我们的播放控件只包含位于视图中心的 play/pause 按钮。我们可以通过在应用程序的 res/layout 目录中创建 exo_playback_control_view.xml 文件来实现这一点,其中包含:

<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 的完整列表可以在 PlaybackControlView and SimpleExoPlayerView 的 Javadoc 中找到。每个标准 ID 的使用都是可选的。

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

这会将控件向下推到屏幕底部:

<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.getPlayer());

编辑:修改了我对来自@RashimiGautam

的建议的回答

参考@Pierre的回答。
还要从 PlayerView 上方删除控制器,在这种情况下,通过在 java 文件中写入 player.showController(false) @id/video_view
您也可以在 xml.
中使用 app:use_controller:false 所以你将是唯一没有控制器的视频。并且 link 它到一个新的控制器,在这种情况下,@id/controls 在视频的底部。