大家假设喜欢我的博客,请关注一下我的微博,请点击这里(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 的优势劣势分析,希望对大家实用

[Android 动画]简要分析一下Animator 与 Animation的更多相关文章

  1. Android动画原理分析

    最近在Android上做了一些动画效果,网上查了一些资料,有各种各样的使用方式,于是乘热打铁,想具体分析一下动画是如何实现的,Animation, Animator都有哪些区别等等. 首先说Anima ...

  2. Android `AsyncTask`简要分析

    AsyncTask简要分析 经典异步任务:AsyncTask,使用场景有:批量下载,批量拷贝等.官方文档就直接给出了一个批量下载的示例. private class DownloadFilesTask ...

  3. Android动画三部曲之中的一个 View Animation & LayoutAnimation

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50612827 本篇文章对android的Tween动画和帧动画以及布局动画进行总结. ...

  4. android 动画属性(一)之Animation

    Animation 在android 程序当中很多时候要用到动画效果,而动画效果主要是Animation来实现的,API给出的解释: 其中包含4种动画效果 AlphaAnimation 渐变透明度 R ...

  5. Android动画总结#补间动画(Tween Animation/View Animation) #帧动画(Frame Animation/Drawable Animation)#属性动画(PropertyAnimation)

    1.共有三种动画,英文名字多种叫法如下 第一种动画:补间动画(Tween Animation/View Animation) 四个:RotateAnimation旋转. AlphaAnimation透 ...

  6. Android动画效果之Tween Animation(补间动画)

    前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...

  7. Android动画之二:View Animation

    作为一个博客<Android其中的动画:Drawable Animation>.android动画主要分为三大部分.上一篇博客已经解说Drawable Animation的使用方法,即逐帧 ...

  8. Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation

    程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...

  9. Android 动画animation 深入分析

    转载请注明出处:http://blog.csdn.net/farmer_cc/article/details/18259117 Android 动画animation 深入分析 前言:本文试图通过分析 ...

随机推荐

  1. oracle 级联查询 根路径

    级联查询有很多教程示例,但是没有找到求特定子孙到根的路径的例子,折腾了一番总算想出方法了. 现假设我们拥有一个菜单表t_menu,其中只有三个字段:id.name和parent_id.它们是具有父子关 ...

  2. Linux dd命令中dsync与fdatasync的区别【转】

    在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及到两个参数:dsync与fdatasync,本文介绍一下其区别. dd if=/dev/zero of=/tmp/1Gbytes b ...

  3. linux系统下如何批量更改文件夹里面所有相同字符【转】

    如网上源码下载下来我们需要调试,调试过程中需要修改里面相同文字,下面提供三种方法供参考 通过sed命令替换 sed -i "s/oldyunwei/newyunwei/g" gre ...

  4. Python学习一|anaconda的安装问题以及Python语言的特点

    安装时遇到的问题 安装anaconda3.0到D盘之后,配置好两个环境变量:D:\anaconda和D:\anaconda\Scripts.发现在命令行中执行python指令可以,但conda指令却是 ...

  5. ASP.NET应用技巧:非托管COM组件的使用

    众所周知,asp.net是基于通用语言运行库创建的,也就是所谓的托管执行环境.生成的代码称为托管代码.编译器能够从源代码的描述中产生元数据信息,而运行库又从元数据中获得托管代码的信息.而我们编写的组件 ...

  6. Eclipse 中 不能创建 Dynamic web project

    工作要涉及web开发,之前下载的java SE (我的是luna) 版本默认无法新建web项目,也就是找不到Dynamic Web ,在网上看了些解决办法,最终却是解决了问题,说到底就是安装一些用于E ...

  7. 用Executors工具类创建线程池

    多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 线程池主要用来解决线程生命周期开销问题和资源不足问题.通过对多个任务重用线程,线程创建 ...

  8. laravel 辅助函数

    数组&对象 1.array_divide() array_divide 函数返回两个数组,一个包含原始数组的健,另一个包含原始数组的值 [$keys, $values] = array_div ...

  9. 023 Hadoop的生态系统

    1.数据来源 RDBM:sqoop 日志文件:flume 2.zookeeper 多台机器保持同步数据. 3.hive sql语句的查询 HQL转换成mapreduce SQL On Hadoop 4 ...

  10. SCTF2018-Event easiest web - phpmyadmin

    6月19日的SCTF的web送分题. 打开链接是一个phpmyadmin的登陆界面,尝试用默认账号:root  密码:root登陆 于是直接进去了,首先看下数据库,除了些初始化的库以外,abc这个库比 ...