我在adobe后制作了一个动画效果并导出了JSON
文件和图像,但是它可以正常工作
因为我已经从资产文件夹中放了照片
问题
我想更改JSON
文件中的一个图像
"assets": [
{
"id": "image_0",
"w": 960,
"h": 540,
"u": "images/",
"p": "img_0.png"
}
这是JSON
文件的一部分,其ID不知道如何更改或更改名称或以编程方式设置图像
换句话说,我想更改我从我的java代码中选择的特定图像,并放置另一个图像,例如更改衬衫图像
答案 0 :(得分:2)
在一些研究后发现答案只是使用这个功能
lottieAnimationView.updateBitmap("the id of the image which is found in the json file",thebitmap);
答案 1 :(得分:1)
经过大量研究,我发现有两种方法可以更改乐天json动画中的图像。
1)正如@Nour Ahmed所说,updateBitmap()
是正确的方法。但是,有一个微妙的提醒,您必须确保LottieAnimationView
完全膨胀且可见。通常情况下,您在onCreate()
中更新了图像,但它不起作用。因此,您可以花一些时间来延迟几毫秒:
// Bug Lottie @@.
lavChest.postDelayed(new Runnable() {
@Override
public void run() {
lavChest.updateBitmap("image_6", bmReward);
lavChest.updateBitmap("image_2", bmNo);
lavChest.updateBitmap("image_4", bmCategory);
lavChest.playAnimation();
}
}, 500);
2)第二种方法是使用setImageAssetDelegate()
,但是只能使用一次。
lavChest.setImageAssetDelegate(new ImageAssetDelegate() {
@Nullable
@Override
public Bitmap fetchBitmap(LottieImageAsset asset) {
switch (asset.getId()) {
case "image_6":
return bmReward;
case "image_2":
return bmNo;
case "image_4":
return bmCategory;
default:
AssetManager am = activity.getAssets();
try {
return BitmapFactory.decodeStream(am.open("aep/" + asset.getDirName() + asset.getFileName()));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
});
lavChest.playAnimation();
尽管关闭包含您的LottieAnimationView的屏幕,但图像仍保留在Lottie缓存中。除非您关闭应用程序,否则没有适当的方法来干扰此缓存。
结论:
setImageAssetDelegate()
第一次更新图像。LottieAnimationView
需要完全可见。答案 2 :(得分:0)
您可以解析json文件,进行更改并将这些更改再次放入json文件中。虽然你将无法做任何事情
write/update
在你的json文件中,如果它存储在assets文件夹中。
答案 3 :(得分:0)
@Nguyen Tan Dat答案解决了我的疑问,谢谢
lavChest.postDelayed(new Runnable() {
@Override
public void run() {
lavChest.updateBitmap("image_6", bmReward);
lavChest.updateBitmap("image_2", bmNo);
lavChest.updateBitmap("image_4", bmCategory);
lavChest.playAnimation();
}
}, 500);
答案 4 :(得分:0)
updateBitmap 应该在 setComposition 之后执行。因为 setComposition 方法将执行setImageDrawable(null)。这将回收位图