Animation框架的支持要比 Animator 早得多,从 Android 发布之日起就一直存在,他主要有以下几个子类,AlphaAnimation(透明度), RotateAnimation(旋转), ScaleAnimation(缩放), TranslateAniamtion(平移), AnimationSet(动画集合)

从名字上,我们就能很清楚的知道 Aniamtion 所支持的动画种类还是很少的, 无非是透明,旋转,缩放,平移这几种的子集.

而相较于 Aniamtion而言, Animator 动画则显得更加强大, 他不仅可以针对 View 实行动画, 甚至可以对所有的 Object 执行"动画"操作,并且使用 Animator 之后的动画效果与使用 Animation 的效果也完全不同.

Animator 动画与 Animation 动画实际上有很多类似的接口,例如 duration 和 interceptor, 其作用都是用来判定动画具体的实现时长以及差值器,对于这个,我们就不用过多介绍.

我们先来看一下 Animator 动画与 Animation 动画的相关实现原理:

(1)对于 Animation 动画:

他的实现机制是,在每次进行绘图的时候,通过对整块画布的矩阵进行变换,从而实现一种视图坐标的移动,但实际上其在 View 内部真实的坐标位置及其他相关属性始终恒定.

(2)对于 Animator 动画:

Animator 动画的实现机制说起来其实更加简单一点,因为他其实只是计算动画开启之后,结束之前,到某个时间点得时候,某个属性应该有的值,然后通过回调接口去设置具体值,其实 Animator 内部并没有针对某个 view 进行刷新,来实现动画的行为,动画的实现是在设置具体值的时候,方法内部自行调取的类似 invalidate 之类的方法实现的.也就是说,使用 Animator ,内部的属性发生了变化.

说完他们的基本实现原理,我们现在来对比一下他们的优势劣势:

(1)版本兼容

不得不说,相对于 Animation,Animator 的版本兼容性还是太差,直到 Android3.0才开始出现的 Animator, 是无法满足目前开发环境2.x 的兼容支持的,而且在 android 官方的 support 包中也没有对于低版本的 Animator 进行支持,所以单从版本兼容来看, Animator 还是不够的,不过这是系统历史原因,我们只能接受.

(2)实现效率

同样的,这也是 Animator 的一个缺点,由于 Animator 是直接通过设置对象的 setter,getter 方法,来起到动画显示效果的,所以为了满足对任意对象调用正确方法, Animator 使用了 Java 反射机制, 而 Animation 则是直接通过代码对矩阵进行处理,所以就效率这一方面而言, Animator比不上 Animation

已经说了 Animator 相较于 Animation 的两种劣势了,那么我们再来说说 Animator 相较于 Animation 的优势

(3)适用性

在上一个分析中,我们看到了由于 Animator 使用了反射机制导致其效率偏低,但是这也带来了他适用的对象范围的增加, Animation 仅对 View 这一种对象有用,但是 Animator 可以设置任意对象的属性,使其在某段时间内进行变化

(4)使用效果

相信大家平时使用 Animation 的时候,都有发现当正在进行平移移动,或者动画结束后,但位置发生改变的时候,你点击之前的位置,点击效果仍然存在,这就是因为 View 在内部的坐标位置其实没有发生改变,而如果使用 Animator 进行位移变换,那么你的点击位置就会随着动画效果发生相应改变,所以即使你正处在动画过程中,你也可以去点击按钮得到你想要的效果.

animation主要用于tween动画。

                //根据资源得到动画Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);//播放动画完成之后,保留动画最后的状态rotateAnimation.setFillAfter(true);//播放动画btnRotate.startAnimation(rotateAnimation);

animator主要用于属性动画。

ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
animator.setDuration(5000);
animator.start();
AnimatorSet animatorSet = new AnimatorSet();//移动ObjectAnimator ty = ObjectAnimator.ofFloat(btn, "translationY", 0,300);ty.setDuration(1000);//旋转ObjectAnimator ry = ObjectAnimator.ofFloat(btn, "rotationY", 0,1080);ry.setDuration(1500);//透明度ObjectAnimator alpha = ObjectAnimator.ofFloat(btn, "alpha", 1,0,0.5f,1);alpha.setDuration(2000);//缩放ObjectAnimator sx = ObjectAnimator.ofFloat(btn, "scaleX", 1,0.5f);alpha.setDuration(1000);//一起播放
//      animatorSet.playTogether(items);animatorSet.play(ry).with(sx).after(ty).before(alpha);animatorSet.start();

Animation和Animator的区别相关推荐

  1. Animation和Animator 的区别

    ①Animation和Animator 虽然都是控制动画的播放,但是它们的用法和相关语法都是大有不同的. Animation 控制一个动画的播放,而Animator是多个动画之间相互切换,并且Anim ...

  2. unity中Animation与Animator的区别

    Animation:单一动画,一般使用在单一动画播放.占用资源小. Animator:多个动画,可用控制器切换多个动画播放.占用资源大. 转载于:https://www.cnblogs.com/Pro ...

  3. 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  4. Android Animation和Animator

    Android Animation和Animator 一.一个很蠢的Bug 二.Animation 2.1 TranslateAnimation平移动画 2.2 RotateAnimation旋转动画 ...

  5. Unity Animation -- 使用Animator控制动画

    在很多实际场景中,我们经常需要根据特定的事件(比如玩家输入,敌人受到攻击等)来播放不同的动画.这需要我们了解一下Animator,Animator Controller和基础的动画状态机. 创建一个开 ...

  6. 用Unity的Animation播放Animator动画Clip

    简单的动画,其实不需要Animator动画状态机管理,用Animation播放效率更高,但可能由于历史遗留问题,或网上下载的第三方资源,得到的是Animator资源,可以在Clip的Debug试图下, ...

  7. animation和transition的区别及使用

    1.animation概念 可以用 name 设置动画的名称,用 duration 设置动画完成的周期,用 timing-function 设置动 画的速度曲线,delay 设置动画什么时候开始,it ...

  8. Unity(Animation和Animator)

    Animation面板 是否导入动画 动画压缩 Position,Rotation,Scale(误差) Clip动画剪辑设置         增加         删除 重命名 设置起始帧 设置结束帧 ...

  9. Unity 动画系统(Animation,Animator,Timeline)

    文章目录 1. Animation 1.1 创建Animation 1.2 Animation 属性 2. Animator 2.1 Animator 组件 2.2 Animation 状态 2.3 ...

最新文章

  1. JS+Canvas的棋盘游戏和Java的动态结合
  2. Android 获取系统语言(兼容7.0)
  3. IE11下用forms身份验证的问题
  4. SQLI DUMB SERIES-16
  5. JDBC实例--JDBC连接池技术解密,连接池对我们不再陌生
  6. 【图】max51开发板top页
  7. 关于: 为什么要写注释----谈一下个人体会
  8. ADO.NET(二)
  9. 入门python之前,应该先了解这些
  10. React native 分享 友盟分享SDK
  11. 关于全球同服和亚马逊Global Accelerating
  12. wifi+遥控器+android,基于安卓手机wifi的智能遥控器设计
  13. 山东省大学生软件设计大赛一等奖作品参赛视频
  14. 每日一道 LeetCode (4):罗马数字转整数
  15. 此实现不是windows平台fips验证的加密算法的一部分
  16. win10设置了睡眠时间,但两分钟无操作仍然黑屏。解决办法
  17. 算法基础:k最近邻算法
  18. 【基础算法】试除法求约数(Acwing869题)
  19. 简单的Windows游戏-第1部分:游戏框架
  20. 硅烷PEG马来酰亚胺,Silane-PEG-Mal,马来酰亚胺聚乙二醇硅烷

热门文章

  1. 给ACCESS2003加密码和去掉密码
  2. Python_乌龟绘图
  3. SystemUI流程
  4. AI留给教练的时间已经不多了
  5. 看看这个和runjs类似的网站jsrun
  6. Altium_Designer(protel_DXP)英文菜单汉化对应表表
  7. ubuntu 18.04 设置开机启动脚本
  8. python实现对小说的文本分析(人物关系图,人物词云等)
  9. 读 活着 【思维导图版】
  10. Redis数据库相关指令