我有一个超级简单的After Effects动画,其中有一个正方形移动(AE形状)。我使用Bodymovin将动画导出为.json,并在项目中使用Lottie添加json文件。到目前为止,一切都很好。
问题从这里开始->在运行时,将“正方形”替换为我在项目中拥有的图像。由于此图像可能会更改,因此我无法将其静态添加到AE动画中,因此需要在运行时动态添加。几乎没有有关如何在Android中执行此操作的信息?
答案 0 :(得分:1)
Lottie具有一个XML
属性app:lottie_imageAssetsFolder
,也可以在运行时设置animationView.setImageAssetsFolder("images/");
。有了这一组,就可以参考json
中的图像。这是在线记录的;请参阅## 599和#630行上方的注释。 documentation中也对此进行了说明(src/assets
不可选项,因为它不可写):
有时,您没有与设备捆绑在一起的图像。如果您是从网络上下载动画的,则可以这样做以节省apk的空间。要处理这种情况,您可以在
ImageAssetDelegate
或LottieAnimationView
上设置LottieDrawable
。每当Lottie尝试渲染图像时,都会调用该委托。它将传递图像名称,并要求您返回位图。如果您还没有它(例如,如果仍在下载中),则只需返回null,Lottie会继续询问每一帧,直到您返回非null值。
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;
}
});
答案 1 :(得分:1)
LottieAnimationView
扩展了ImageView
。换句话说,LottieAnimationView
也是ImageView
。
因此,您可以在LottieAnimationView
上设置图像,就像在ImageView
上设置图像一样。
例如:
if (isAnimated) {
mLottieView.setAnimation("<json file name from asset folder>");
} else {
mLottieView.setImageResource(R.drawable.square_image);
}
这只是一个示例,说明如何使用同一视图播放动画(json文件),而您只是像任何ImageView
一样显示图像。
答案 2 :(得分:0)
设法做到这一点:问题是我的After Effects动画具有矢量形状,而我正试图替换它。在将原始动画改为.png之后,可以在运行时替换Image。工作得很好。
// 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);
这适用于一个图像,现在我要看看如何在运行时替换多个图像。