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

Jetpack Compose中修改Lottie动画颜色:如何获取KeyPath?

获取Lottie动画KeyPath的方法

一、手动获取KeyPath

手动获取是最直接的方式,常用两种途径:

  • 通过可视化工具查看层级:把你的Lottie动画文件(.json)上传到Lottie在线编辑器,或者使用Android Studio内置的Lottie预览窗口。展开动画的层级结构,就能看到从顶层图层到具体元素(比如形状、填充、描边)的名称链,这个链条就是KeyPath数组的内容。比如要修改某个填充颜色,就依次记下「图层名 → 形状组名 → 填充名」。
  • 从AE源文件确认:如果动画是用AE制作导出的,直接打开AE工程,找到目标元素的层级路径——AE里的图层、形状组、填充/描边的名称,就是Lottie KeyPath对应的每一项。注意导出Lottie时要保留元素的原始名称,避免自动简化导致名称不匹配。

二、编程方式获取KeyPath

如果需要动态遍历或批量获取KeyPath,可以通过Lottie的API解析动画的Composition结构:

示例代码(Kotlin/Compose)

// 假设已加载目标Lottie动画资源
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.your_animation))

LaunchedEffect(composition) {
    composition?.let { comp ->
        // 遍历所有图层
        comp.layers.forEach { layer ->
            println("图层名称: ${layer.name}")
            // 递归遍历图层内的形状元素
            traverseShapeElements(layer)
        }
    }
}

// 递归遍历形状元素的工具函数
private fun traverseShapeElements(layer: Layer) {
    layer.shapes?.forEach { shape ->
        when (shape) {
            is ShapeGroup -> {
                println("形状组: ${shape.name}")
                // 遍历形状组内的子元素
                shape.items.forEach { item ->
                    when(item) {
                        is ShapeFill -> println("填充: ${item.name}")
                        is ShapeStroke -> println("描边: ${item.name}")
                        // 可扩展处理其他类型的形状元素
                    }
                }
            }
            is ShapeFill -> println("填充: ${shape.name}")
            is ShapeStroke -> println("描边: ${shape.name}")
        }
    }
}

运行代码后,控制台会输出动画所有元素的层级路径,你可以根据输出的名称组合成需要的KeyPath数组。


内容的提问来源于stack exchange,提问作者Sourav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:19