Zeero0
Zeero0

Reputation: 2780

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?

Upvotes: 7

Views: 8953

Answers (2)

Extremis II
Extremis II

Reputation: 5583

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);

Upvotes: 4

galcyurio
galcyurio

Reputation: 1855

According to javadoc, we have none of corresponding method. http://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/ui/SimpleExoPlayerView.html

  • controller_layout_id - Specifies the id of the layout resource to be inflated by the child PlaybackControlView. See below for more details.
  • Corresponding method: None
  • Default: R.id.exo_playback_control_view

And also we cannot inherit the SimpleExoPlayerView because its definition is final.

What are you trying to achieve through programmatically adding? Is it just that?

Upvotes: 0

Related Questions