Categories: Android

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.

 

AdminHacker

Recent Posts

Capacités, combinaisons de personnages et plus

Feu gratuit introduit de nouveaux personnages avec une compétence distincte après chaque mise à jour…

2 ans ago

COD Mobile taquine un crossover avec le légendaire rappeur Snoop Dogg

Dans une étrange tournure des événements qui semblerait insensée à quiconque vivait il y a…

2 ans ago

Les messages de Google suscitent enfin des réactions des iPhones et plus encore

  Google déploie aujourd'hui la mise à jour très attendue qui permettra aux utilisateurs de…

2 ans ago

Concours de design GT7 annoncé

  Pour célébrer le lancement de Gran Turismo 7, nous nous sommes associés à des…

2 ans ago

Apple annonce un plan de retour au bureau pour les employés d’entreprise, avec un modèle hybride à partir du 11 avril

  Une vue de la Space Needle depuis l'immeuble de bureaux d'Apple à Seattle au…

2 ans ago

Lots Tundra Tracker épuisés en seulement 3 minutes hier

  Tundra Tracker, une rondelle de suivi SteamVR née d'un Kickstarter réussi l'année dernière, a…

2 ans ago