HarmonyOS 属性动画扩展 原创 精华
深开鸿
发布于 2022-1-14 14:49
浏览
3收藏
作者:卢日见
简介
HarmonyOS 提供了AnimatorValue
来执行属性动画,但是其方法数很少,并且属性值范围局限于[0,1],也不直接支持动画反转等一些常用的操作。在日常开发中,我们经常需要基于这个类进行扩展编写,去适应真实场景。因此,通过收集常用的场景,整理出一个属性动画的扩展类ValueAnimator
。
效果演示
实现思路
1. 动画分类
实际开发过程,我们大部分的动画都是作用于视图组件。任何复杂的动画,通过逐帧分解,最终都可以归纳为如下几种基础动画的组合:
- X,Y轴缩放动画
- X,Y轴平移动画
- 透明度动画
- 旋转角度动画
- 组件宽高尺寸动画
2. 动画操作
对于动画的操作,我们可以归纳出以下这些动作:
- 开始动画
- 暂停动画
- 取消动画
- 结束动画
- 反转动画
- 设置动画起始值
- 设置动画延时
- 设置动画执行时长
- 设置动画插值器
- 设置动画状态监听
- 设置动画进度监听
- 设置动画执行次数
- 设置动画重复模式
- 设置组件动画属性值
3. 代码实现
3.1 视图动画的实现
系统原生提供的AnimatorValue
为我们提供了[0,1]的动画范围。因此最简单的实现方式是定义一个ValueAnimator
,内部包含一个系统的AnimatorValue
来计算[0,1]的进度值,通过自己的逻辑转换为我们期望的动画值。
3.2 反向循环动画的实现
要执行反向循环动画,我们需要监听循环动画的每次循环节点,然后在下一次动画执行开始把动画的起始值反置。
3.3 动画操作的实现
因为我们核心的动画值计算是基于原生的ValueAnimator
,因此我们基本的动画操作也是对其执行:
总结
通过我们对原生AnimatorValue
的扩展,我们实现了实际开发中大部分应用场景,让实际开发动画的效率可以大大提升。总结一下几点核心的扩展原理:
- 视图组件动画实现:监听原生动画值进行倍率转换,再设置给组件通用属性
- 反向/循环动画实现:监听循环动画的循环节点,反向赋值下一次动画的起始值
代码地址
更多原创内容请关注:深开鸿技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2022-1-14 14:49:27修改
赞
6
收藏 3
回复
6
2
3
相关推荐
感谢老师的扩展分享,向老师学习不断扩展的精神
搞一套拼音编程汉语注释鸿蒙专属编程语言喂
加油华为