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