web-dev-qa-db-fra.com

ExoPlayer: placez le contrôleur sous la vidéo sans la superposer

J'ai une PlayerView qui occupe la moitié supérieure de l'activité en orientation portrait, la moitié inférieure de l'écran affichant du texte.

Je dois avoir le contrôleur sous la vidéo sans recouvrir le contenu vidéo (il sera toujours affiché). Par défaut, lorsqu'un utilisateur touche la vidéo, le contrôleur apparaît au bas de la vidéo et recouvre la partie inférieure de la vidéo. Dans mon cas, le contrôleur doit rester sous la vidéo sans intersections avec le contenu vidéo.

J'ai parcouru les API SimpleExoPlayer et PlayerView mais je n'ai trouvé aucun moyen de le faire.

Question: Comment puis-je placer le contrôleur sous la vidéo avec ExoPlayer?

Voici à quoi ressemble la mise en page:

<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>
12
Oleksandr Shpota

Cela poussera les commandes au bas de l'écran:

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

Puis en Java:

PlayerView videoView = findViewById(R.id.video_view);
PlayerControlView controls = findViewById(R.id.controls);
controls.setPlayer(videoView);

Edit: Modifié ma réponse à la suggestion de @RashimiGautam

13
Pierre

Reportez-vous à la réponse de@Pierre.
Aussi pour supprimer le contrôleur de PlayerView ci-dessus, @id/video_view en écrivant player.showController(false) dans un fichier Java.
Vous pouvez également utiliser app:use_controller:false dans le xml.
Ainsi, vous aurez la seule vidéo sans contrôleur en haut. Et associez-le à un nouveau contrôleur, dans ce cas, @id/controls au bas de la vidéo.

5
Rashmi Gautam

Cela pourrait vous donner une idée, avez-vous également essayé de remplacer les commandes ?

Par exemple, supposons que nous voulions que nos commandes de lecture ne soient composées que d’un bouton Lecture/Pause placé au centre de la vue. Nous pouvons y parvenir en créant un fichier exo_playback_control_view.xml dans le répertoire res/layout de l’application, contenant:

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

Notez que, dans la présentation, @id/exo_play et @id/exo_pause sont des identifiants standard définis par la bibliothèque ExoPlayer. L'utilisation d'identifiants standard est nécessaire pour que les vues enfants puissent être identifiées, liées au lecteur et mises à jour de manière appropriée. Une liste complète des ID standard pour chaque vue se trouve dans les documents Javadoc pour PlaybackControlView et SimpleExoPlayerView . L'utilisation de chaque identifiant standard est facultative.

https://medium.com/google-exoplayer/customizing-exoplayers-ui-components-728cf55ee07a

3
Tejashwi Kalp Taru