J'ai une animation After Effects, super simple, d'un carré en mouvement (forme AE). J'exporte l'animation au format .json en utilisant Bodymovin, et j'ajoute le fichier json en utilisant Lottie dans mon projet. Jusqu'ici tout va bien.
Le problème commence ici -> pendant l'exécution, remplacez ce "carré" par une image que j'ai également dans mon projet. Étant donné que cette image peut changer, je ne peux pas l'ajouter de manière statique à mon animation AE, j'ai donc besoin de l'ajouter dynamiquement pendant l'exécution. Il n'y a presque aucune information sur la façon de faire cela dans Android?
3 Réponses :
Lottie a un attribut Parfois, les images ne sont pas fournies avec l'appareil. Vous pouvez le faire pour économiser de l'espace dans votre apk ou si vous avez téléchargé l'animation à partir du réseau. Pour gérer ce cas, vous pouvez définir un XML
app: lottie_imageAssetsFolder
, qui peut également être défini au moment de l'exécution: animationView.setImageAssetsFolder ("images /"); . avec cet ensemble, on peut référencer des images dans le
json
. ceci est documenté en ligne; voir les commentaires au-dessus de la ligne # 599 et # 630 . ceci est également expliqué dans la documentation ( src / assets
peut ne pas être une option, car il n'est pas accessible en écriture):
ImageAssetDelegate
sur votre LottieAnimationView
ou LottieDrawable
. Le délégué sera appelé chaque fois que Lottie essaiera de rendre une image. Il passera le nom de l'image et vous demandera de renvoyer le bitmap. Si vous ne l'avez pas encore (si le téléchargement est encore en cours, par exemple), renvoyez simplement null et Lottie continuera à demander à chaque image jusqu'à ce que vous retourniez une valeur non nulle. animationView.setImageAssetDelegate(new ImageAssetDelegate() {
@Override
public Bitmap fetchBitmap(LottieImageAsset asset) {
if (downloadedBitmap == null) {
// We don't have it yet. Lottie will keep asking until we return a non-null bitmap.
return null;
}
return downloadedBitmap;
}
});
Merci Martin! J'ai besoin de demander cependant, que serait 'téléchargéBitmap' ici? Merci
Le 'dowloadedBitmap' serait-il un bitmap que je dois créer (l'image externe que je veux diriger au moment de l'exécution, convertie en bitmap?), Ou comment cela fonctionnerait-il? Merci!
LottieAnimationView
étend une ImageView
. En d'autres termes, le LottieAnimationView
est également un ImageView
.
Vous pouvez donc définir une image sur LottieAnimationView
de la même manière que vous définissez un image en ImageView
Par exemple:
if (isAnimated) { mLottieView.setAnimation("<json file name from asset folder>"); } else { mLottieView.setImageResource(R.drawable.square_image); }
Ceci est juste un exemple de la façon dont vous pouvez jouer une animation (fichier json) il suffit d'afficher une image comme n'importe quel ImageView
..
J'ai réussi à faire ceci: le problème était que mon animation After Effects avait une forme vectorielle, et j'essayais de la remplacer. Après avoir changé l'animation originale pour avoir un .png à la place, je pourrais remplacer l'image au moment de l'exécution. A bien fonctionné.
// First I converted the png I wanted to see at runtime to a bitmap: Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), R.drawable.imageBlah); // I used the lambda: lottieAnimationView.setImageAssetDelegate( lottieImageAsset -> bitmapImage);
Cela a fonctionné pour UNE image, maintenant je vais voir comment remplacer plusieurs images lors de l'exécution.
Avez-vous trouvé une solution pour remplacer plusieurs images lors de l'exécution?