[Android 动画]简要分析一下Animator 与 Animation

[Android 动画]简要分析一下Animator 与 Animation

大家好,又见面了,我是全栈君。

大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢

转载请标明出处(http://blog.csdn.net/kifile),再次感谢


在 Android 的开发过程中, 大家平时一般都或多或少会使用到一些动画, 通常大家一般使用的都是 Animation, 可是实际上Android 在3.0的时候就已经推出了 Animator 框架用以提升 Android 本身的动画效果,尽管我们一般基于2.x 开发的时候无法享受到 Animator 服务,可是这并不影响我们来体验一下他的强大之处.


首先我们先来了解一下 Animation,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 进行位移变换,那么你的点击位置就会随着动画效果发生对应改变,所以即使你正处在动画过程中,你也能够去点击button得到你想要的效果.


以上四点就是 Animation 和 Animator 的优势劣势分析,希望对大家实用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115273.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2018年强势推荐区块链产品项目:流量魔盒详细操作攻略[通俗易懂]

    流量魔盒概述    在日常生活中,我们使用流量的方式其实都不是100%正确。例如微信,每使用一段时间就会产生大量的缓存垃圾,我们只有去清理掉缓存垃圾才能使我们的微信操作更流畅。    当我们使用了1G的流量,必定会产生一定量的缓存,流量魔盒把流量缓存统一、归集、上传、累计每个用户的缓存转化为真实流量作为实际应用,合理利用资源,把产生的流量缓存变成我们的财富。 注册地址https:…

    2022年4月18日
    53
  • 2019最新Android面试题「建议收藏」

    2019最新Android面试题「建议收藏」金三银四到来了,找工作的好时候到了,小伙伴们是不是都在忙着找工作呢,小弟前一阵也是忙着在找工作,面试了好多公司,所幸的是进到了自己心仪的公司,也是很幸运的。下面我将自己亲身实战的面试题及收到的面试题总结并分享答案出来。欢迎各位大哥指导、指点。下面这些只是Android方面的知识,如果有需要Java方面的面试题的话,可以在下面留言。1.Activity生命周期(这个是必问的)onCrea…

    2022年5月11日
    42
  • 用html设计一个网站_html个人网页中文模板

    用html设计一个网站_html个人网页中文模板多的不说,直接上网页我个人自学的,样子不是恒好看,但是可以作为作业(老师也没怎么讲,毕竟是在大学里面嘛,大部分时间都是自学罢了)这是主页面index.html<htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><title>

    2022年10月13日
    3
  • PostgreSQL ISO 8601

    PostgreSQL ISO 8601国际标准化组织的国际标准ISO8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。(摘自百度百科)selectcast(‘2018-08-05T11:00:00Z’astimestamp),–标准时间 cast(‘2018-08-0…

    2025年7月4日
    3
  • 实战项目中Java heap space错误的解决[通俗易懂]

    实战项目中Java heap space错误的解决[通俗易懂] java高级面试 2018-09-0720:19:23部标GPS通讯系统在上线之后,经过不断调试,终于稳定运行一段时间,后来又遇到了Javaheapspace错误异常!日志如下: 说明系统中有未释放的对象。如何找出这些未释放对象以及监控JVM堆内存,优化代码释放内存对象呢?还有JVM的垃圾回收机制是如何运作的呢?首先在系统启动运行的时候打开记录GC详细信息,运行脚本…

    2022年7月8日
    18
  • emWin学习[通俗易懂]

    emWin学习[通俗易懂]一、API学习  1.1、初始化     intGUI_Init(void); 函数来初始化emWin内部数据结构和变量。如果在初始化之前调用WM_SetCreateFlags()使用窗口管理器,则在GUI_Init()内创建背景窗口。(也就是窗口设置创建标记必须在初始化之前)。  1.2、显示文本     可以显示字符串、十六进制、十进制、二进制数,文

    2022年10月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号