You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:18:10