大家如果喜欢我的博客,请关注1下我的微博,请点击这里(http://weibo.com/kifile),谢谢
转载请标明出处(http://blog.csdn.net/kifile),再次感谢
在 Android 的开发进程中, 大家平时1般都或多或少会使用到1些动画, 通常大家1般使用的都是 Animation, 但是实际上Android 在3.0的时候就已推出了 Animator 框架用以提升 Android 本身的动画效果,虽然我们1般基于2.x 开发的时候没法享遭到 Animator 服务,但是这其实不影响我们来体验1下他的强大的地方.
首先我们先来了解1下 Animation,Animation框架的支持要比 Animator 早很多,从 Android 发布之日起就1直存在,他主要有以下几个子类,AlphaAnimation(透明度), RotateAnimation(旋转), ScaleAnimation(缩放), TranslateAniamtion(平移), AnimationSet(动画集合)
从名字上,我们就可以很清楚的知道 Aniamtion 所支持的动画种类还是很少的, 不过是透明,旋转,缩放,平移这几种的子集.
而相较于 Aniamtion而言, Animator 动画则显得更加强大, 他不但可以针对 View 实行动画, 乃至可以对所有的 Object 履行"动画"操作,并且使用 Animator 以后的动画效果与使用 Animation 的效果也完全不同.
Animator 动画与 Animation 动画实际上有很多类似的接口,例如 duration 和 interceptor, 其作用都是用来判定动画具体的实现时长和差值器,对这个,我们就不用过量介绍.
我们先来看1下 Animator 动画与 Animation 动画的相干实现原理:
(1)对 Animation 动画:
他的实现机制是,在每次进行绘图的时候,通过对整块画布的矩阵进行变换,从而实现1种视图坐标的移动,但实际上其在 View 内部真实的坐标位置及其他相干属性始终恒定.
(2)对 Animator 动画:
Animator 动画的实现机制说起来其实更加简单1点,由于他其实只是计算动画开启以后,结束之前,到某个时间点得时候,某个属性应当有的值,然后通过回调接口去设置具体值,其实 Animator 内部并没有针对某个 view 进行刷新,来实现动画的行动,动画的实现是在设置具体值的时候,方法内部自行调取的类似 invalidate 之类的方法实现的.也就是说,使用 Animator ,内部的属性产生了变化.
说完他们的基本实现原理,我们现在来对照1下他们的优势劣势:
(1)版本兼容
不能不说,相对 Animation,Animator 的版本兼容性还是太差,直到 Android3.0才开始出现的 Animator, 是没法满足目前开发环境2.x 的兼容支持的,而且在 android 官方的 support 包中也没有对低版本的 Animator 进行支持,所以单从版本兼容来看, Animator 还是不够的,不过这是系统历史缘由,我们只能接受.
(2)实现效力
一样的,这也是 Animator 的1个缺点,由于 Animator 是直接通过设置对象的 setter,getter 方法,来起到动画显示效果的,所以为了满足对任意对象调用正确方法, Animator 使用了 Java 反射机制, 而 Animation 则是直接通过代码对矩阵进行处理,所以就效力这1方面而言, Animator比不上 Animation
已说了 Animator 相较于 Animation 的两种劣势了,那末我们再来讲说 Animator 相较于 Animation 的优势
(3)适用性
在上1个分析中,我们看到了由于 Animator 使用了反射机制致使其效力偏低,但是这也带来了他适用的对象范围的增加, Animation 仅对 View 这1种对象有用,但是 Animator 可以设置任意对象的属性,使其在某段时间内进行变化
(4)使用效果
相信大家平时使用 Animation 的时候,都有发现当正在进行平移移动,或动画结束后,但位置产生改变的时候,你点击之前的位置,点击效果依然存在,这就是由于 View 在内部的坐标位置其实没有产生改变,而如果使用 Animator 进行位移变换,那末你的点击位置就会随着动画效果产生相应改变,所以即便你正处在动画进程中,你也能够去点击按钮得到你想要的效果.
以上4点就是 Animation 和 Animator 的优势劣势分析,希望对大家有用