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

通过代码设置Lottie动画颜色失败,文字颜色无法生效求助

解决Lottie动画文字颜色修改失效问题

问题场景

尝试修改Lottie动画的文字颜色但未成功,背景颜色设置功能正常,相关代码如下:

UI XML代码

<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/lottie_count_down"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginStart="@dimen/dp_0"
    android:translationZ="@dimen/dp_20"
    android:visibility="visible"
    app:lottie_rawRes="@raw/countdown_animation" /> <!-- 对应的JSON动画文件 -->

原有Kotlin代码

val simpleColor = SimpleColorFilter(Color.parseColor(App.settings!!.theme.textColor))
val callback = LottieValueCallback<ColorFilter>(simpleColor)
callback.setValue(simpleColor)

lottieCountDownAnimation.addValueCallback(
    KeyPath("**"),
    LottieProperty.COLOR_FILTER,
    callback
) // 设置文字颜色失效

lottieCountDownAnimation!!.setBackgroundColor(Color.parseColor(App.settings!!.theme.backgroundColor)) 
// 背景颜色设置正常

lottieCountDownAnimation.playAnimation()

问题原因

  1. 使用LottieProperty.COLOR_FILTER是给元素添加颜色滤镜,而非直接修改文字的填充色/描边色;
  2. KeyPath("**")全局匹配可能未精准命中文字元素的颜色属性,或文字元素的颜色属性类型不匹配。

解决方案

方案1:精准定位文字图层修改填充色

先打开你的countdown_animation.json文件,找到文字对应的图层名称(比如图层name字段为countdown_text),然后用精准KeyPath匹配:

// 替换为你JSON文件中实际的文字图层名称
val textKeyPath = KeyPath("countdown_text", "**")
val targetTextColor = Color.parseColor(App.settings!!.theme.textColor)

// 创建填充色回调
val colorCallback = LottieValueCallback<Int>(targetTextColor)

lottieCountDownAnimation.addValueCallback(
    textKeyPath,
    LottieProperty.COLOR, // 针对填充色属性修改
    colorCallback
)

方案2:全局修改所有填充色元素(含文字)

如果需要修改动画中所有填充类元素的颜色(包括文字),可以直接全局匹配填充色属性:

val targetTextColor = Color.parseColor(App.settings!!.theme.textColor)
val colorCallback = LottieValueCallback<Int>(targetTextColor)

lottieCountDownAnimation.addValueCallback(
    KeyPath("**"),
    LottieProperty.COLOR,
    colorCallback
)

特殊情况:文字为描边样式

若你的Lottie文字是用描边实现的,需将LottieProperty.COLOR替换为LottieProperty.STROKE_COLOR:

val colorCallback = LottieValueCallback<Int>(targetTextColor)

lottieCountDownAnimation.addValueCallback(
    KeyPath("countdown_text", "**"),
    LottieProperty.STROKE_COLOR,
    colorCallback
)

最终完整代码示例

// 修改文字颜色
val targetTextColor = Color.parseColor(App.settings!!.theme.textColor)
val textKeyPath = KeyPath("countdown_text", "**") // 替换为实际图层名称
val colorCallback = LottieValueCallback<Int>(targetTextColor)

lottieCountDownAnimation.addValueCallback(
    textKeyPath,
    LottieProperty.COLOR,
    colorCallback
)

// 背景颜色设置(保留原有正常代码)
lottieCountDownAnimation.setBackgroundColor(Color.parseColor(App.settings!!.theme.backgroundColor))
lottieCountDownAnimation.playAnimation()

内容的提问来源于stack exchange,提问作者Arvind Madhukar Shelke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:36:07