Lottie 2.3.2版本如何单独控制文件中各合成的动画?
在Lottie 2.3.2中单独控制多合成动画的方法
在Lottie 2.x版本(包括2.3.2)中,虽然旧构造函数的composition参数被移除,但可以通过以下方式单独控制Lottie文件中的某个合成动画:
1. 加载完整的Lottie合成文件
首先需要加载包含所有合成的完整Lottie文件,获取全局的LottieComposition对象:
// 以加载assets目录下的动画文件为例 LottieCompositionFactory.fromAsset(context, "multi_comp_animation.json") .addListener(composition -> { // 后续操作基于这个全局composition对象 setupTargetAnimation(composition); });
2. 指定要单独播放的合成图层
每个独立合成在Lottie文件中对应一个Layer对象(类型为Layer.LayerType.COMPOSITION),你可以通过图层名称或索引来定位目标合成,然后通过LottieAnimationView的setLayerName()方法单独加载该合成:
private void setupTargetAnimation(LottieComposition composition) { LottieAnimationView targetAnimView = findViewById(R.id.target_anim_view); targetAnimView.setComposition(composition); // 指定要播放的合成图层名称(替换为你实际的合成名称) targetAnimView.setLayerName("login_animation_comp"); // 可选:设置动画循环模式 targetAnimView.setRepeatCount(LottieDrawable.INFINITE); }
3. 独立控制动画状态
设置好目标合成后,就可以用常规方法单独控制这个合成的播放、暂停、进度等:
// 播放动画 targetAnimView.playAnimation(); // 暂停动画 targetAnimView.pauseAnimation(); // 设置动画进度(0到1之间) targetAnimView.setProgress(0.5f);
4. 多合成同时独立控制
如果需要同时控制多个合成,只需创建多个LottieAnimationView实例,分别绑定同一个全局composition,并设置不同的layerName即可,每个实例的动画状态完全独立:
// 控制第一个合成 LottieAnimationView animView1 = findViewById(R.id.anim_view_1); animView1.setComposition(composition); animView1.setLayerName("comp_1"); // 控制第二个合成 LottieAnimationView animView2 = findViewById(R.id.anim_view_2); animView2.setComposition(composition); animView2.setLayerName("comp_2"); // 分别控制播放 animView1.playAnimation(); animView2.pauseAnimation();
注意事项
- 确保每个合成图层有唯一的名称,你可以用Lottie编辑器(如LottieFiles Editor)打开原文件查看图层结构和名称。
- 如果找不到图层名称,也可以通过遍历
composition.getLayers()列表,根据图层类型和索引来定位目标合成:
Layer targetLayer = null; for (Layer layer : composition.getLayers()) { if (layer.getLayerType() == Layer.LayerType.COMPOSITION && layer.getIndex() == 1) { targetLayer = layer; break; } } // 通过图层名称设置 if (targetLayer != null) { targetAnimView.setLayerName(targetLayer.getName()); }
内容的提问来源于stack exchange,提问作者DJ. XYZ
相关产品推荐
相关产品推荐

