通过代码设置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()
问题原因
- 使用
LottieProperty.COLOR_FILTER是给元素添加颜色滤镜,而非直接修改文字的填充色/描边色; 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
相关产品推荐
相关产品推荐

