6

通过 XML,我们可以轻松地将自定义 UI 控制器 ( controller_layout_id ) 添加到SimpleExoPlayerView,如下所示:

    <com.google.android.exoplayer2.ui.SimpleExoPlayerView
        android:id="@+id/exo_player_view"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        app:controller_layout_id="@layout/player_controls"/>

有没有办法以编程方式添加这样的布局?

4

2 回答 2

3

目前没有这样的方法可以让您直接在 playerView 上设置自定义控制器。相反,您必须将控制器添加到 xml 中的 playerview 并对其进行充气。

在我的情况下,我为添加控制器做了以下操作(我假设您不打算在播放视频或充气后更改控制器)

第 1 步:仅使用 playerview 和控制器定义您的 xml

 //simple_exo_player.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.exoplayer2.ui.PlayerView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/playerView"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     app:rewind_increment="10000"
     app:fastforward_increment="10000"
     android:background="#000"
     app:show_timeout="1000"
     app:controller_layout_id="@layout/custom_playback_control"
     app:resize_mode="fit">

第 2 步:给它充气并获取 PlayerView

 PlayerView customPlayerView;
 View view = LayoutInflater.from(applicationContext).inflate(R.layout.simple_exo_player, null, false);`enter code here`   
 customPlayerView = (PlayerView) view.getRootView();

由于您没有提到要以编程方式添加它的原因,我将假设以下内容。

  1. 您想拥有多个自定义控制器,并根据视图类型使用它
  2. 您打算在 recyclerview(或多个视图集)中使用它,而不是使用已经在 xml 中预定义的自定义控制器的 playerview,您想以编程方式添加它

这是你必须做的:

通过更改行创建具有不同控制器的多个playerview布局文件

app:controller_layout_id="你的自定义控制器"

现在获取您在步骤 2 中编写的自定义播放器视图

将其添加到您的回收站视图中的所需位置

FrameLayout playArea;
playArea = v.findViewById(R.id.exoplayer_frame);
playArea.addView(customPlayerView);
于 2019-03-11T18:17:09.787 回答
0

根据javadoc,我们没有相应的方法。 http://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/ui/SimpleExoPlayerView.html

  • controller_layout_id - 指定要由子 PlaybackControlView 膨胀的布局资源的 id。请参阅下面的更多细节。
  • 对应方法:无
  • 默认值:R.id.exo_playback_control_view

而且我们不能继承 SimpleExoPlayerView 因为它的定义是final

您想通过以编程方式添加来实现什么?仅仅是这样吗?

于 2017-11-03T06:51:55.643 回答