0

L'application sur laquelle je travaille anime les marqueurs de carte après leur ajout à l'écran à l'aide d'ObjectAnimators. L'animation remplace l'icône par des bitmaps progressivement plus grands ou plus petits. Environ 20% du temps, il annulera l'animation de manière aléatoire, ne la laissant que partiellement agrandie ou rétrécie. Je sais qu'il est annulé parce que a) l'animation ne se termine pas et b) si j'ajoute un AnimatorListener, alors onAnimationCancel() est appelé dans ces moments.Pourquoi mon marqueur de carte ObjectAnimators est-il annulé?

Cela ne semble pas être lié à la récupération de place, à d'autres broches (cela peut se produire lorsqu'une seule broche est placée sur l'écran), à d'autres codes qui s'exécutent pendant que l'animation est en cours.

Ils ne sont pas mis à autoCancel, et même si elles étaient, il ne serait pas déclenché car plusieurs animations identiques ne sont pas en cours de démarrage.

Une idée du tout pourquoi cela se produirait? Est-ce que quelqu'un a déjà vu des animations annulées de manière aléatoire et inattendue?

Répondre

0

Eh bien, je me sens comme un idiot - j'ai finalement compris pourquoi ce qui se passait!

ObjectAnimators ont seulement une faible référence à leur objet cible.

Si vous ne maintenez pas une référence distincte à l'objet animé d'une autre variable, parfois il sera ramasse-miettes avant que l'animation est terminée. L'itération suivante de l'ObjectAnimator tentera de mettre à jour l'objet, échouera car l'objet cible est nul, puis annulera l'animation.

La solution, alors, est tout simplement de vous assurer d'avoir une référence variable objet, au moins jusqu'à ce que l'animation soit terminée.

Hope this helps - je suis sûr que je ne peux pas être le seul qui est géré dans cette question!