
Android开发笔记(一百四十五)仿应用宝的垃圾清理动画
比如应用宝的垃圾清理动画,它的初始画面由三个深红色的月牙环绕组成,效果如下图所示:

然后在垃圾清理的过程中,这三个月牙一边转,填充色也一边渐变,月牙转圈动画结束之时,其内部的颜色也从深红色变成了亮绿色,效果下图所示:

只看静态截图还有点抽象,还是观看具体的动画方便理解,下面的动图展示了月牙转动之时、颜色也随之改变的完整过程。

我们知道矢量动画AnimatedVectorDrawable只能由xml文件定义,以支付成功动画的xml描述文件为例,根节点是animated-vector,下级节点是target,完整的xml文件内容如下所示:
一般animated-vector下面只有一个target节点,那么如果下面挂了好几个target节点会怎么样呢?接下来就来探讨探讨这么做会产生什么反应。
首先对垃圾清理动画进行分解,一方面是月牙的旋转动画,另一方面是月牙填充色的渐变动画。旋转角度和填充颜色其实都属于矢量图形的属性,按照属性动画的做法,只要指定这些属性的起始数值和终止数值,即可让系统自动实现动画的渲染过程。所以垃圾清理动画看起来是由这两个动画组合而成:月牙的旋转动画,以及月牙填充色的渐变动画。
在矢量图形描述中,旋转角度由group节点的rotation参数定义,填充色由path节点的fillColor参数定义,因此接着就要在月牙矢量图形描述中分别定义group节点和path节点。为节约篇幅,下面只给出了第一个月牙图形的矢量定义,第二个和第三个月牙的矢量定义与之类似,仅在pathData的路径数据上有所区别。
然后依据前面的分析,构造两个属性动画的行为描述,下面是月牙旋转动画的xml描述(改变rotation属性的数值):
下面是月牙填充色渐变动画的xml描述(改变fillColor属性的数值):
接着在矢量动画的xml描述文件中加入各个动画单位的目标,每个月牙都有旋转和颜色渐变两个动画单位,整个垃圾清理界面有三个月牙,那么总共就需要六个动画单位,于是animated-vector节点下面得补充六个target节点,完整的矢量动画描述如下所示:
最后由代码控制矢量动画的播放,点击播放按钮时执行下列代码,即可看到文章开头的垃圾清理动画效果了。
__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。
发布日期:2021-05-07 19:03:39
浏览次数:28
分类:原创文章
本文共 3437 字,大约阅读时间需要 11 分钟。
除了动画监听器,动画组合也是各类动画常见的用法,比如把几个补间动画组合起来,就形成了集合动画AnimationSet;把几个属性动画组合起来,就形成了属性动画组合AnimatorSet。那么能否把几个矢量动画在时间上并行组合起来,也形成一种矢量动画组合呢?比如应用宝的垃圾清理动画,它的初始画面由三个深红色的月牙环绕组成,效果如下图所示:
然后在垃圾清理的过程中,这三个月牙一边转,填充色也一边渐变,月牙转圈动画结束之时,其内部的颜色也从深红色变成了亮绿色,效果下图所示:
只看静态截图还有点抽象,还是观看具体的动画方便理解,下面的动图展示了月牙转动之时、颜色也随之改变的完整过程。
我们知道矢量动画AnimatedVectorDrawable只能由xml文件定义,以支付成功动画的xml描述文件为例,根节点是animated-vector,下级节点是target,完整的xml文件内容如下所示:
一般animated-vector下面只有一个target节点,那么如果下面挂了好几个target节点会怎么样呢?接下来就来探讨探讨这么做会产生什么反应。
首先对垃圾清理动画进行分解,一方面是月牙的旋转动画,另一方面是月牙填充色的渐变动画。旋转角度和填充颜色其实都属于矢量图形的属性,按照属性动画的做法,只要指定这些属性的起始数值和终止数值,即可让系统自动实现动画的渲染过程。所以垃圾清理动画看起来是由这两个动画组合而成:月牙的旋转动画,以及月牙填充色的渐变动画。
在矢量图形描述中,旋转角度由group节点的rotation参数定义,填充色由path节点的fillColor参数定义,因此接着就要在月牙矢量图形描述中分别定义group节点和path节点。为节约篇幅,下面只给出了第一个月牙图形的矢量定义,第二个和第三个月牙的矢量定义与之类似,仅在pathData的路径数据上有所区别。
然后依据前面的分析,构造两个属性动画的行为描述,下面是月牙旋转动画的xml描述(改变rotation属性的数值):
下面是月牙填充色渐变动画的xml描述(改变fillColor属性的数值):
接着在矢量动画的xml描述文件中加入各个动画单位的目标,每个月牙都有旋转和颜色渐变两个动画单位,整个垃圾清理界面有三个月牙,那么总共就需要六个动画单位,于是animated-vector节点下面得补充六个target节点,完整的矢量动画描述如下所示:
最后由代码控制矢量动画的播放,点击播放按钮时执行下列代码,即可看到文章开头的垃圾清理动画效果了。
__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月14日 21时32分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
80. Remove Duplicates from Sorted Array II
2021-05-09
83. Remove Duplicates from Sorted List
2021-05-09
410. Split Array Largest Sum
2021-05-09
开源项目在闲鱼、b 站上被倒卖?这是什么骚操作?
2021-05-09
Vue3发布半年我不学,摸鱼爽歪歪,哎~就是玩儿
2021-05-09
《实战java高并发程序设计》源码整理及读书笔记
2021-05-09
Java开源博客My-Blog(SpringBoot+Docker)系列文章
2021-05-09
程序员视角:鹿晗公布恋情是如何把微博搞炸的?
2021-05-09
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
2021-05-09
Linux应用-线程操作
2021-05-09
多态体验,和探索爷爷类指针的多态性
2021-05-09
系统编程-进程间通信-无名管道
2021-05-09
记2020年初对SimpleGUI源码的阅读成果
2021-05-09
C语言实现面向对象方法学的GLib、GObject-初体验
2021-05-09
系统编程-进程-ps命令、进程调度、优先级翻转、进程状态
2021-05-09
为什么我觉得需要熟悉vim使用,难道仅仅是为了耍酷?
2021-05-09
一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
2021-05-09
HDOJ2017_字符串统计
2021-05-09