ExoPlayer:将控制器放在视频下方而不与视频重叠
ExoPlayer: Place controller under the video without overlapping the video
我有一个 PlayerView
,它占据了纵向 Activity 的上半部分,屏幕的下半部分显示了一些文本。
我需要在视频下方放置控制器,而不与视频内容重叠(它将始终显示)。默认情况下,当用户触摸视频时,控制器会出现在视频底部,覆盖视频的底部。我的情况是,我需要控制器贴在视频下方,与视频内容没有交集。
我查看了 SimpleExoPlayer
和 PlayerView
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
在视频的底部。
我有一个 PlayerView
,它占据了纵向 Activity 的上半部分,屏幕的下半部分显示了一些文本。
我需要在视频下方放置控制器,而不与视频内容重叠(它将始终显示)。默认情况下,当用户触摸视频时,控制器会出现在视频底部,覆盖视频的底部。我的情况是,我需要控制器贴在视频下方,与视频内容没有交集。
我查看了 SimpleExoPlayer
和 PlayerView
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
在视频的底部。