看到这边文章,默认你已经懂得 lottie 库的基本使用了。不懂请移步官网。https://airbnb.design/lottie/

我遇到的问题是需要修改动画的颜色。

比如在一个按钮的点击动效中,可能需要根据按钮的状态动态的修改动效的颜色,那么该怎么操作呢?

首先要明白在颜色绘制的两种类型:填充和描边,即我们在view 的绘制中的solid 和stroke

在bodymovin生成的json动效文件中对应的是如下

"nm": "填充 1",//此动效中颜色绘制的名称,可自定义

"mn": "ADBE Vector Graphic - Fill"//颜色绘制的类型 填充,固定参数

"nm": "描边 1",//此动效中颜色绘制的名称,可自定义

"mn": "ADBE Vector Graphic - Stroke",//颜色绘制的类型 描边,固定参数

接下来在代码中如何操作呢:

第一种方式 通过需要修改颜色的keypath 的关键字匹配来批量操作

//方法一

...

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

LottieAnimationView mirror = findViewById(R.id.mirror);

mirror.addLottieOnCompositionLoadedListener(

new LottieOnCompositionLoadedListener() {

@Override

public void onCompositionLoaded(LottieComposition lottieComposition) {

//过滤所有的keypath

List list = mirror.resolveKeyPath(

new KeyPath("**"));

//通过匹配关键字的深度,来过滤需要改变颜色的keypath

for (KeyPath path : list) {

Log.d("mirror", path.keysToString());

//通过匹配关键字的深度对深度为1 和2 的填充色进行修改

if (path.matches("填充 1", 2)||path.matches("填充 1", 1) ) {

mirror.addValueCallback(path,

//修改对应keypath的填充色的属性值

LottieProperty.COLOR,

new SimpleLottieValueCallback() {

@Override

public Integer getValue(

LottieFrameInfo lottieFrameInfo) {

return COLORS[1];

}

});

}else if(path.matches("描边 1", 2) ){ //通过匹配关键字的深度修改深度为2 的描边色进行修改

mirror.addValueCallback(path,

//修改对应keypath的描边色的属性值

LottieProperty.STROKE_COLOR,

new SimpleLottieValueCallback() {

@Override

public Integer getValue(

LottieFrameInfo lottieFrameInfo) {

//修改对应keypath的描边色

return COLORS[1];

}

});

}

}

}

});

...

}

第二种方式 直接输入具体的keypath 来进行修改

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

LottieAnimationView mirror = findViewById(R.id.mirror);

mirror= findViewById(R.id.blur);

mirror.addLottieOnCompositionLoadedListener(

new LottieOnCompositionLoadedListener() {

@Override

public void onCompositionLoaded(LottieComposition lottieComposition) {

List list = mirror.resolveKeyPath(

new KeyPath("**"));

//这段代码就是为了打印出所有的keypath 让你判断哪些需要修改颜色

for (KeyPath path : list) {

Log.d("mirror", path.keysToString());

}

KeyPath keyPath1 = new KeyPath("Rectangle 17","填充 1");

mirror.addValueCallback(keyPath1,

//修改对应keypath的填充色的属性值

LottieProperty.COLOR,

new SimpleLottieValueCallback() {

@Override

public Integer getValue(

LottieFrameInfo lottieFrameInfo) {

return COLORS[1];

}

});

KeyPath keyPath2 = new KeyPath("Rectangle 20","Rectangle","描边 1");

mirror.addValueCallback(keyPath2,

//修改对应keypath的填充色的属性值

LottieProperty.STROKE_COLOR,

new SimpleLottieValueCallback() {

@Override

public Integer getValue(

LottieFrameInfo lottieFrameInfo) {

return COLORS[1];

}

});

}

});

}

代码中会打印出所有的keypath 在所有的keypath 中,你选择对应路径且末尾带有ADBE Vector Graphic - Fill对应的 "nm": "填充 1" 或ADBE Vector Graphic - Stroke 对应的 "nm": "描边 1" 中的 填充和描边对应的字样它们可能会是"nm": "Fill1" 和"nm": "STROKE 1"

如果你的动效实在是复杂到有无数个keypath 需要修改,且命名和深度都没有规律可言,那么不如和动效师再沟通沟通。

OTHER

打印出来的keypath 如下,仅供参考

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [空 8]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 矩形路径 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 填充 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 矩形路径 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 填充 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 矩形路径 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 填充 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 矩形路径 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 填充 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 矩形路径 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 填充 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 矩形路径 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 2, Rectangle 2, 填充 1]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 21]

2020-04-29 02:16:58.649 12813-12813/com.example.animatedemo D/mirror: [Rectangle 21, Rectangle]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 21, Rectangle, 描边 1]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 20]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 20, Rectangle]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 20, Rectangle, 描边 1]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 19]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 19, Rectangle]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 19, 填充 1]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 18]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 18, Rectangle]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 18, 填充 1]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 17]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 17, Rectangle]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 17, 填充 1]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 16]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 16, Rectangle]

2020-04-29 02:16:58.650 12813-12813/com.example.animatedemo D/mirror: [Rectangle 16, 填充 1]

android点击改变背景色的动画,Lottie-android 修改动画颜色相关推荐

  1. ios基础考试题1,实现按钮点击改变位置和图片的透明度和动画的使用

    ios基础考试题1,实现按钮点击改变位置和图片的透明度和动画的使用 考察frame,center,bounds的坐标,改变,动画的使用,图片容器的UIImageView的透明度等知识 oc写法 // ...

  2. element若依 菜单点击改变背景色

    element&若依 菜单点击改变背景色 element只提供了激活时候改变字体的颜色 找到激活的菜单查看代码 从#app开始的,只能整个复写,加上激活的class: is-active &l ...

  3. adobe android 动画,Lottie - Android 动画详解

    Lottie 是 Airbnb 开源的火热动画库,让程序员告别痛苦的动画.对于曾经写一个大动画两三千行代码的我来说,无疑是一个巨大的福利. 接下来我将逐步介绍Lottie的使用及源码,以及 Adobe ...

  4. android 点击接口回调,带你了解Android接口回调机制

    Android接口回调机制 接口回调是在Android中运用广泛的一种机制,你一定会眼熟它,接下来,我们从两个方面来了解接口回调 Android源码 自行动手实际运用 1.从setOnclickLis ...

  5. Android界面全屏适配7.0、动态修改状态栏颜色、浅色状态栏深色字体

    https://www.jianshu.com/p/e93787e23d3b 在需要置顶的界面添加主题TopTheme 为了适配要创建多个value文件夹,名称不能错 styles.xml <! ...

  6. jquery实现点击改变背景色,点击其他恢复原来背景色,被点击的改变背景色

    实现这个功能很简单,可是之前自己不怎么熟悉jquery,感觉各种乱写.现在终于整理好了思路. html: <div class="managementPanel">&l ...

  7. android点击弹出滑动条,IndicatorSeekBar Android自定义SeekBar,滑动时弹出气泡指示器显示进度...

    overview.png 之前在网上看到了当Slider控件在滑动时会弹出气泡指示器,觉得很有趣,于是就进行拓展,就有了下面介绍的一个安卓控件:IndicatorSeekBar.先附上Indicato ...

  8. android点击通知跳转到服务,Android 接收推送消息跳转到指定页面的方法

    问题的提出 本次接入的是个推,其他家的推送没有研究过,思路应该是类似的 App在前台,这个时候需要弹出一个对话框,提醒用户有新的消息,是否要查看,查看的话跳转到指定页面 App在后台,或是App进程已 ...

  9. android点击按钮打开自带浏览器,android – 如何在默认浏览器或webview中打开按钮单击URL...

    如何在单击按钮后在Webview或默认浏览器中打开网址?目前,当我点击btn1按钮时,它会提示我从手机中选择一个浏览器.我想在默认浏览器或webview中打开此URL. 这是我的java代码: pub ...

最新文章

  1. 2020人工神经网络第一次作业-参考答案第二部分
  2. Ubuntu16.04安装ROS后运行gazebo报错 it says it‘s incompatible with that RT“‘ failed.
  3. 域名服务器(DNS)工作原理
  4. 数据结构实验之排序七:选课名单
  5. 25 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义利润分析码
  6. ghost不要用作域控的备份
  7. mysql的主从,主主,半同步
  8. 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法
  9. 让人头皮发麻的KMP的next函数 困扰我三四天后终于解决了
  10. Portainer容器管理软件,安装
  11. Java架构-CAS SSO单点登录框架介绍
  12. VC InitInstance函数
  13. 详解CATransformLayer
  14. 一句话,读懂首席架构师、CTO和技术总监的区别
  15. 解决运行uiautomatorviewer时报错-Djava.ext.dirs=/usr/local/android-sdk-
  16. 全国IT标准化技术委员会教育技术分会CETSC介绍 (公号回复“CETSC”下载PDF资料,欢迎转发、赞赏支持)
  17. mysql让其他机器访问_mysql设置允许其它机器连接
  18. 所有的自卑,可能都源于这个惯性思维
  19. 信息系统项目管理师考试是自学好还是找培训好?
  20. 剑指 Offer 61-68

热门文章

  1. 关于Window操作系统中对Oracle的性能监控
  2. vue-cli2.9.6 build项目无法访问资源 无法访问elementUI字体
  3. 【图解计算机组成原理】第1章 计算机系统概论
  4. flink on yarn HA高可用集群搭建
  5. docker run常用参数说明
  6. Linux free -m命令查看内存使用情况
  7. 【软考-软件设计师】计算机体系结构的分类
  8. 详解Spring Boot 2.X使用缓存@Cacheable代码示例
  9. 使用$.post和$.get向服务器发送请求
  10. Python之函数的收集参数和分配参数用法(‘*’ 和 ‘**’)