Utilisation d’Exoplayer dans LazyColumn. J’ai joué avec Compose…
Avant d’entrer dans le code, réfléchissons aux scénarios que nous allons traiter :
* Un seul élément vidéo est visible
* Plusieurs éléments vidéo sont visibles
Dans le cas d’un seul élément, c’est assez simple – nous commençons à lire la vidéo dès que l’élément est visible à l’écran. Dans le cas de plusieurs vidéos, cependant, nous souhaitons lire la vidéo la plus proche du centre de l’écran.
Nous voulons également utiliser un seul ExoPlayer
instance au lieu d’en créer une nouvelle pour chaque vidéo.
Dans cet esprit, plongeons dans le code 🤿
Il y a beaucoup de choses dans le code, alors regardons ça un peu. Dans un premier temps, nous fournirons un listState
à la LazyColumn
car nous l’utiliserons pour accéder aux tweets actuellement visibles. Passer à la méthode determineCurrentlyPlayingItem
, nous vérifions d’abord si l’un des tweets visibles contient une vidéo ou un gif. Si nous trouvons un seul de ces tweets, nous le remettons simplement en lecture. Sinon, nous trions les éléments de colonne en fonction de leur distance par rapport au centre de la colonne et renvoyons le premier élément de cette liste.
Ensuite, nous devons maintenir une instance de ExoPlayer
et mettez-le à jour pour jouer le currentlyPlayingItem
déterminé à l’étape précédente. nous utiliserons remember
garder une instance de SimpleExoPlayer
pendant la vie de l’écran.
Pour la lecture vidéo, nous passerons le currentlyPlayingItem
avec la méthode suivante, qui mettra à jour la source multimédia du lecteur.
Cependant, si le tweet
C’est null
, nous avons arrêté la lecture afin qu’aucune vidéo hors écran ne soit plus lue.
Bien qu’il puisse sembler que nous ayons terminé, il y a peu de choses que nous oublions.
juste parce que nous sommes dans Compose
-land ne signifie pas que nous pouvons ignorer le cycle de vie d’Android. Nous devrons mettre en pause / reprendre la lecture en fonction de l’état du cycle de vie ainsi que supprimer le ExoPlayer
exemple lorsque le cycle de vie est détruit.
heureusement, Compose
fournit une pratique DisposableEffect
qui vous permet d’effectuer un nettoyage chaque fois que la clé change. Utilisons un lifecycleOwner
comme clé.
Ce code est assez explicite – nous venons de mettre à jour le player
pour divers événements du cycle de vie.
Enfin et surtout, nous devons utiliser le ExoPlayer
instance que nous avons créée pour lire la vidéo. Puisqu’il n’y a pas PlayerView
Toujours compostable, profitons Compose
interopérabilité et utilisation AndroidView
plutôt que.
Eh bien, c’est à peu près tout. J’ai été agréablement surpris de la simplicité du Compose
la mise en œuvre est comparée à votre View
contrepartie basée, puisque nous n’avons pas à nous occuper du recyclage des vues.
Commentaires
Laisser un commentaire