Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set custom controller programmatically for SimpleExoPlayerView

Through XML we can easily add custom UI controller (controller_layout_id) to SimpleExoPlayerView, like this:

    <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"/>

Is there a way to add such layout programmatically?

like image 235
Zeero0 Avatar asked Nov 03 '17 05:11

Zeero0


People also ask

How do you customize ExoPlayer UI?

Customizing ExoPlayer Attributes The duration is specified in milliseconds. Use zero to disable the rewind button. fastforward_increment — This was the attribute used to specify the duration of the forward applied when the user taps the forward button. The duration is specified in milliseconds.

Does YouTube use ExoPlayer?

Screenshot: The YouTube Android app, which uses ExoPlayer as its video player. ExoPlayer is an app-level media player built on top of low-level media APIs in Android. It is an open source project used by Google apps, including YouTube and Google TV.


1 Answers

There is no such method at this moment which allows you to directly set a custom controller on playerView. instead you have to add your controller to playerview in xml and the inflate it.

In my case I did the following for adding the controller (I assume, you are not planning to change controller while playing the video or after inflating it)

Step 1: Define your xml with just playerview and controller

 //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">

Step 2: Inflate it and get the PlayerView

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

As you haven't mentioned the reason why you wanted to add it programmatically, I will assume the following.

  1. You want to have multiple custom controller, and use it based on view type
  2. you are planning to use it in recyclerview(or multiple view set) were instead of having playerview with custom controller already predefined in xml, you want to add it programatically

here's what you have to do:

create multiple layout files of playerview with different controllers by changing the line

app:controller_layout_id="your custom controller"

now get your custom playerview as written in step 2

add it to the your recyclerview at required position

FrameLayout playArea;
playArea = v.findViewById(R.id.exoplayer_frame);
playArea.addView(customPlayerView);
like image 96
Extremis II Avatar answered Nov 15 '22 05:11

Extremis II