我正在开发一款带有Lottie动画的应用。其中一个lottie动画需要两个图像文件(img_0.png,img1_.png)。
例如,
lottie json文件[data.json]:{&#34; v&#34;:&#34; 5.1.7&#34;,&#34; fr&#34;:60,&#34 ; IP&#34;:0,&#34; OP&#34; 120&#34; W&#34; 180&#34; H&#34;:200,&#34;纳米&#34 ;: &#34; 2&#34;&#34; DDD&#34;:0,&#34;资产&#34;:[{&#34; ID&#34;:&#34; image_0&#34;,& #34; W&#34;:96,&#34; H&#34;:96,&#34; U&#34;:&#34;影像/&#34;&#34; p&#34 ;: &#34; img_0.png&#34;},{&#34; ID&#34;:&#34; IMAGE_1&#34;&#34; W&#34; 180&#34; H&#34; :180,&#34; U&#34;:&#34;影像/&#34;&#34; p&#34;:&#34; img_1.png&#34;}],.... < / em>的
我无法在main / assets文件夹中为LottieAnimationView准备所有图像,因此我使用&#34; setImageAssetDelegate&#34;从异步中获取多个图像的方法。
这是我的代码。
Glide.with(this)
.asBitmap()
.load("https://www.google.co.kr/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(final Bitmap resource, Transition<? super Bitmap> transition) {
LottieAnimationView lottie = findViewById(R.id.lottie);
lottie.setImageAssetDelegate(new ImageAssetDelegate() {
@Override
public Bitmap fetchBitmap(LottieImageAsset asset) {
return resource;
}
});
lottie.playAnimation();
}
});
但如果我使用&#34; setImageAssetDelegate&#34;方法,我只能把一个图像放到lottie。我想在一个lottie动画中放置多个不同的图像。
我需要这个&#34; setImageAssetDelegate&#34;方法
有人对此有任何想法吗? 感谢。
答案 0 :(得分:1)
异步获取图像将不起作用。
ImageAssetDelegate
旨在成为动画播放时所需图像的“提供者”。
动画正在播放时,动画中的每个图像都会调用'方法public Bitmap fetchBitmap(LottieImageAsset asset)
,你有责任提供正确的方法,传递给该方法的LottieImageAsset会给你从动画json
文件获取的那一刻需要哪个图像的详细信息。
您可以使用Glide
来获取这些图片,但需要记住,您必须同步获取它们,并且在您加载/提供该图像之前动画不会继续播放。
一个例子:
LottieAnimationView lottie = findViewById(R.id.lottie);
lottie.setImageAssetDelegate(new ImageAssetDelegate() {
@Override
public Bitmap fetchBitmap(LottieImageAsset asset) {
return Glide.loadSychronous("http://" + asset.getId + ".png");
}
});
lottie.playAnimation();
注意:这是伪代码,您必须查找如何与Glide
同步加载图片,并且您必须想出一种方法来将图片ID与正确的图片网址相匹配。
另一种方法是使用Glide
加载所有动画所需的图像,保存它们(在内存或外部存储器中),然后才开始播放动画;这可能适用于小动画;对于任何更大的东西,你都会遇到麻烦,因为a。加载所有图像需要太长时间或b。你内存不足。