Android 属性动画的一些思考

本文介绍了Android中属性动画的原理及其实现方式,并讨论了动画的性能问题和焦点问题。属性动画利用每秒60帧的刷新同步信号,在每次同步信号到来后执行动画队列里的所有动画,实现流畅的动画效果。

Android 中有两大动画体系, 一个为3.0以前的补间动画,帧动画. 一个为3.0之后新增的属性动画. 由于旧的动画体系有诸多缺陷,使用过程有很多坑.所以当前流行的大多都是属性动画.

属性动画原理:

新增的属性动画并非是单独针对View动画的, 他是一组由值动画体系补充而形成的针对Object get/set属性进行插值操作的一系列API.
简单点讲,就是Android 将新的动画体系依托于每秒60帧的刷新同步信号(VSYNC), 在每次同步信号到来之后固定的增加了一步, 就是执行当前动画队列里的所有动画. 也就是每隔~16ms 会步进一次所有的动画.

属性动画的注意事项:

  1. 属性动画的性能问题.
    属性动画是否流畅是动画最基本要考虑的重要指标. 根据属性动画的原理,实际上动画是否流畅取决于是系统当前是否有丢帧.
  2. 属性动画的焦点问题.
    属性动画包含位移,旋转,缩放等.考虑一个最简单的情形, 当我们通过动画移动某个View到另外的位置时,此时点击什么位置才能响应其点击事件. 答案是: 点击移动到的新的目标位置能够响应View的点击事件.
    同样的 缩放和旋转等操作, 也将同样的修改View的点击区域为新的View的边界区间.
    那有人要问了, 经过动画后的View的 矩形区间是哪里呢? 答案是: View的坐标空间,矩形大小并未产生改变,还是在原来的位置. 我们可以打开 开发者选项, 并打开View布局边界显示,来查看每个View的位置空间.

那为什么点击事件响应会变化到新的空间呢? 这要从View的属性动画支持原理上来说了. View针对属性动画有一个TransformationInfo 结构用来保存动画所需的各属性. 同时有一个mMatrix 属性来保存当前属性变化的矩阵. 也就是说,针对View的动画最终会转换成对矩阵的运算. 同样的, 点击坐标也会相应的基于此矩阵进行变换, 最终还原成未动画时点击的位置坐标. 这样当我们点击动画后的View 位置时,实际坐标会转换成未动画时的位置坐标. 这样就可以简单判断点击是否落在View 矩形空间内. 以此来触发点击操作.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值