Android

Utilisation d’Exoplayer dans LazyColumn. J’ai joué avec Compose…

Le 31 juillet 2021 - 3 minutes de lecture

 

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

Votre commentaire sera révisé par les administrateurs si besoin.