exoplayer 样本上的自定义 UI

Custom UI on exoplayer sample

** 我真的很需要帮助,如果你什么都不懂,请不要给我负分:|如果有什么困扰你评论**

我想在 Exoplayer 中为我的播放器编写自定义 UI(更改暂停播放按钮或添加播放器速度等新按钮)。

我使用来自 github 的 Exoplayer 示例,在将代码添加到我的原始项目之前,我想在官方示例上测试自定义 UI。

我在 Whosebug 和 tuts+ 中阅读了有关自定义的页面 UI,但我真的很困惑!

为什么更改某些按钮图像或更改它们的位置一定如此困难 :) 我该如何处理?

编辑

这是样本 https://github.com/google/ExoPlayer/tree/master/demo

我看了这两篇文章:

http://www.brightec.co.uk/ideas/custom-android-media-controller

http://code.tutsplus.com/tutorials/create-a-music-player-on-android-user-controls--mobile-22787

根据此 link "Instead of writing your own media controller from scratch, you could start with the MediaController class that is included in Android" 我问这个问题是因为我无法在 exoplayer 库上执行此步骤,并且教程是为默认媒体播放器编写的

实际上涉及播放和暂停方法的代码在class PlayerControl中。

如果您不想使用默认 Android 媒体控制器 UI,请不要使用 MediaController class,创建您自己的 [=28] =] 在布局文件中使用自定义播放和暂停按钮并将操作与按钮的 onClickListener 绑定。

要播放视频,请致电 exoPlayer.setPlayWhenReady(true);

然后暂停:调用 exoPlayer.setPlayWhenReady(false);

how to create custom UI for android MediaController

类似的问题

好的,那花了我半天的时间,直到我没有深入研究库代码并找到这样的文本:

要在整个应用程序中自定义 PlaybackControlView 的布局,或仅针对某些配置,您可以定义 exo_playback_control_view.xml 布局文件在您的应用程序 res/layout 目录中。这些布局将覆盖 ExoPlayer 库提供的布局,并将被放大以供 PlaybackControlView 使用。

全文:https://github.com/google/ExoPlayer/blob/release-v2/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java

此外,想补充一点,您可以像这样在 PlayerView 中指定自定义布局:

<com.google.android.exoplayer2.ui.SimpleExoPlayerView android:id="@+id/player_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:controller_layout_id="@layout/custom_controls"/>

自定义 ExoPlayer 的 UI 非常简单。如果您查看 ExoPlayer 源代码,布局 res 目录包含指向(包括)另一个布局的文件 exo_player_control_view.xml - exo_playback_control_view.

  1. 复制布局资源的内容 - exo_playback_control_view.xml
  2. 使用您选择的任何名称创建布局资源文件 - 例如:custom_exo_playback_control_view.xml。将复制的内容粘贴到新的xml
  3. 根据需要对 UI 小部件进行任何更改。不要更改任何 widget/control.
  4. 的 Id 属性
  5. 在包含 PlayerView.
  6. 的布局文件中指向自定义 exoPlayer UI 资源

这是我根据原作创建的 custom_exo_controller_view xml。我想要播放器控件的不同背景颜色以及不同的按钮和进度视图颜色:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@drawable/attachment_document_desc_bg"
    android:layoutDirection="ltr"
    android:orientation="vertical"
    android:paddingStart="20dp"
    android:paddingEnd="20dp"
    tools:targetApi="28">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:orientation="horizontal"
      android:paddingTop="4dp">

    <ImageButton
        android:id="@id/exo_prev"
        style="@style/ExoMediaButton.Previous"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_rew"
        style="@style/ExoMediaButton.Rewind"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_shuffle"
        style="@style/ExoMediaButton.Shuffle"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_repeat_toggle"
        style="@style/ExoMediaButton"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_play"
        style="@style/ExoMediaButton.Play"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_pause"
        style="@style/ExoMediaButton.Pause"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_ffwd"
        style="@style/ExoMediaButton.FastForward"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_next"
        style="@style/ExoMediaButton.Next"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

    <ImageButton
        android:id="@id/exo_vr"
        style="@style/ExoMediaButton.VR"
        android:tint="@color/colorPrimaryDark"
        android:tintMode="src_in" />

  </LinearLayout>

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="4dp"
      android:gravity="center_vertical"
      android:orientation="horizontal">

    <TextView
        android:id="@id/exo_position"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:includeFontPadding="false"
        android:paddingLeft="4dp"
        android:paddingRight="4dp"
        android:textColor="#ff323232"
        android:textSize="14sp"
        android:textStyle="bold" />

    <com.google.android.exoplayer2.ui.DefaultTimeBar
        android:id="@id/exo_progress"
        android:layout_width="0dp"
        android:layout_height="26dp"
        android:layout_weight="1"
        app:played_color="@color/colorPrimaryDark"
        app:unplayed_color="@color/gray" />

    <TextView
        android:id="@id/exo_duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:includeFontPadding="false"
        android:paddingLeft="4dp"
        android:paddingRight="4dp"
        android:textColor="#ff323232"
        android:textSize="14sp"
        android:textStyle="bold" />

  </LinearLayout>

</LinearLayout>

下面是我为播放器使用的代码。注意,xml 属性 app:controller_layout_id 指向上面定义的自定义控制器视图。

<FrameLayout 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"
    android:padding="20dp">

  <com.google.android.exoplayer2.ui.PlayerView
      android:id="@+id/video_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_gravity="center"
      app:auto_show="true"
      app:controller_layout_id="@layout/custom_exo_controller_view"
      app:fastforward_increment="10000"
      app:repeat_toggle_modes="none"
      app:resize_mode="fixed_width"
      app:rewind_increment="10000"
      app:surface_type="surface_view"
      app:use_controller="true" />

</FrameLayout>

这应该会得到 UI 您想要的方式。

您可以根据需要在自定义控制器和代码中添加额外的控件,找到带有 findViewById() 的控件并编写事件侦听器等。