Android Animation学习(一) Property Animation介绍

Android Animation

  Android framework提供了两种动画系统: property animation (introduced in Android 3.0)和view animation

  除了这两种系统外,也可以利用Drawable animation,也就是播放序列帧图像。

  所以,Android中的Animation分三种:

  1. Property Animation

  2. View Animation

  3. Drawable Animation

  下面主要说Property Animation

Property Animation

  Property AnimationAndroid 3.0引进的,也即API Level 11,这套系统让你可以对任意对象(即便不在屏幕上的对象)的任何属性进行动画变换。

  为了让某件东西动起来,你指定对象要变换的属性,动画持续的时间,以及你在动画之中想要达到的值即可。

  通过property animation系统你可以定义一个动画的下列特性:

  Duration: 动画持续的时间,默认值是300ms。

  Time interpolation: 时间插值,你可以定义随着时间的变换,属性值是如何变换的。

  Repeat count and behavior: 你可以指定一个动画是否重复进行,以及重复几次,也可以指定是否让动画倒着回放,这样可以动画可以来回进行,直到达到了所要求的重复次数。

  Animator sets: 你可以把动画行为组织成一个逻辑集合,它们一起播放或者顺序播放,或者也可以在指定的延迟后播放。

  Frame refresh delay: 你可以指定多久刷新一次你的动画的帧。默认值被设置为每10ms,但是你的应用刷新帧的频率是和系统当前的实际情况相关的。

原理介绍 How Property Animation Works

  ValueAnimator 对象持有动画时间,比如动画已经进行了多长时间,和变换的属性的当前值。

  ValueAnimator中封装了TimeInterpolatorTypeEvaluator

  TimeInterpolator定义了动画的时间插值,比如可以线性或者加速减速;

  TypeEvaluator定义了如何计算被动画改变的属性值。

  

  为了开启一个动画,首先构造一个ValueAnimator对象,把你想要改变的属性值的起始值、终止值以及动画时间告诉它,当你调用 start()方法时,动画开始。

  在整个动画的过程中,所涉及的计算分为下面三步:

  1.这个ValueAnimator对象会根据动画的总时间和已经流逝的时间计算出一个0到1之间的elapsed fraction值。这个elapsed fraction值就代表了时间完成的程度。

  2.计算出elapsed fraction之后,ValueAnimator对象会调用TimeInterpolator 来计算一个interpolated fraction,即,根据所设置的时间插值方法将elapsed fraction映射到interpolated fraction

  如果是线性插值的话elapsed fractioninterpolated fraction会是一直相等的,但是非线性变换就不是了。

  3. interpolated fraction计算出来后,ValueAnimator 会调用TypeEvaluator,来进行你要动画的属性值的计算。

  这时候用的输入参数就是interpolated fraction的值,以及属性值的起始值和终止值。

  整个过程如下图所示:

Property Animation API

  Property Animation系统的大多数API都在这个包中:android.animation

  但是由于View Animation系统定义了一些插值器(interpolator),所以你可以直接使用这个包android.view.animation中的一些插值器。

  

  链接:http://developer.android.com/guide/topics/graphics/prop-animation.html中的API Overview部分列表介绍了Property Animation的API,可前往查看。

  API主要分为Table 1. Animators,Table 2. Evaluators,Table 3. Interpolators三大部分。

  Animatiors中:

  ValueAnimator只计算出属性值,并不将属性值设置在对象上,所以你必须监听属性值的更新,自己修改对象的属性,实现动画逻辑。

  用法见:Animating with ValueAnimator

  ObjectAnimatorValueAnimator的子类,在构造函数中传入了目标对象和对应属性值的名字(要求对象类有相应的get/set方法),会自动进行属性值得设置。

  用法见:Animating with ObjectAnimator

  AnimatorSet提供了Animation的组合,

  用法见: Choreographing multiple animations with Animator Sets

  

  另外,Animation Listeners也很重要:Animation Listeners

Property Animation和View Animation的关系

  View Animation是比较旧的一套系统,仅仅适用于View对象。

  并且View Animation系统限制了可以动画的方面,比如缩放和旋转是可以的,但是背景颜色的动画是做不了的。

  View Animation系统的另一个缺陷就是它仅仅改变了View绘制的位置,并没有改变View本身实际的位置。

  比如,如果你让一个按钮通过动画移动到屏幕上的另一个位置,虽然它绘制在目标位置,但是你要点击它还是要在原来的位置,所以你需要自己写逻辑去处理这种问题。

  Property animation系统就不存在上面的问题,它是确实地改变了View对象的真实属性

  

  从Android 3.0起,View类加了很多属性和方法用来进行Property animation。

  这些属性有:

translationX and translationY

rotation, rotationX, and rotationY

scaleX and scaleY

pivotX and pivotY

x and y

alpha

  当这些属性值被改变的时候,View会自动调用 invalidate()方法来进行刷新。

Declaring Animations in XML

  Property animation系统允许你用xml来声明动画,这样做一是可以达到动画的复用,通用性更强,另一个好处是编辑多个动画的序列更加容易,可读性更好。

  为了区分Property animation和View animation的资源文件,从Android 3.1开始,Property animation的xml文件存在res/animator/目录下(View animation的存在res/anim/目录下), animator这个名是可选的。但是如果你想要使用Eclipse ADT plugin (ADT 11.0.0+)的布局编辑器,你就必须使用res/animator/目录,因为ADT只在该目录下寻找property animation的资源文件。

  对应的标签如下:

  定义Property Animation的语义,详见: Animation Resources

参考资料

  官方API Guides:

  http://developer.android.com/guide/topics/graphics/overview.html

  Property Animation:

  http://developer.android.com/guide/topics/graphics/prop-animation.html

  Property Animation package:

  http://developer.android.com/reference/android/animation/package-summary.html

Android Animation学习(一) Property Animation原理介绍和API简介的更多相关文章

  1. Android动画效果之Property Animation进阶(属性动画)

    前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...

  2. Android 属性动画(Property Animation) 全然解析 (下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38092093 上一篇Android 属性动画(Property Animatio ...

  3. Android 属性动画(Property Animation) 完全解析 (下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38092093 上一篇Android 属性动画(Property Animatio ...

  4. 通过AnimationSet 同步或一部播放多个动画 Android 属性动画(Property Animation) 完全解析 (下)

    AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等. 以下例子同时应用5个动画: 播放anim1: 同时播放anim2,anim3,a ...

  5. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  6. Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提 供了几种动画类型:View Anima ...

  7. 【转】Android 属性动画(Property Animation) 完全解析 (上)

    http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animation .Dra ...

  8. Android 动画——属性动画Property Animation

    Android在3.0之前只提供了两种动画:View Animation .Drawable Animation .也就是我们在<Android 动画——Frame Animation与Twee ...

  9. Android 属性动画(Property Animation) 全然解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...

随机推荐

  1. 第一篇博文:PHP函数原型中的可选参数写法为什么这么写?

    第一篇,算是开始吧.简单写点儿东西. 刚开始学PHP,在看PHP Manual时遇到一个问题:含可选参数的函数原型中,可选参数的写法看不懂. 例如explode函数 array explode ( s ...

  2. 创建数据库和表相关的SQL语句

    SQL server注释语句有两种: 一种是单行注释,一种是多行注释. ******************** 单行注释用:--注释一行内容 多行注释用:/* *注释 *多行内容 */ 创建数据库: ...

  3. java虚拟机启动参数分类详解

    官方文档见: http://docs.sun.com/source/819-0084/pt_tuningjava.html java启动参数共分为三类:其一是标准参数(-),所有的JVM实现都必须实现 ...

  4. Windows Azure Traffic Manager (6) 使用Traffic Manager,实现本地应用+云端应用的高可用

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的是使用国内由世纪互联运维的Azure China服务. 以前的Traffic Manager,背后的Serv ...

  5. QCustomplot使用分享(七) 层(完结)

    一.分层绘制 一直说要讲2.0.0版本,但总是想把1.3.2版本拿出来比较一下,这篇文章也不例外.QCustomPlot2.0.0beta版本比1.3.2release版本有一个很大的改进那就是分层绘 ...

  6. git gitignore文件失效处理

    这里讲的是使用 git ignore 时候的一种特殊情况   正常你在本地给项目添加了一些文件之后,一般都会自动全部跟踪,但是在这个时候你必须编辑一个ignore文件,把一些不需要跟踪到文件ignor ...

  7. 一图看懂host_only nat bridge拓扑结构

    VMware三种模式 我们在使用VMware时经常能看到三种网络的连接模式:Bridged  Host-Only Nat,它们都有什么作用,网络拓扑是怎样的?怎样才能让他们上网,他们相互间能不能相互访 ...

  8. SyteLine实现字段过滤

    如果说某个下拉列表,想过滤某些选项,该怎样来做呢,在Infor Syteline实现起来是一件很容易的事情.如在Fixed Assets窗口中的Class Code的下拉列表中,如果不想"_ ...

  9. TCP - 流量控制 and 拥塞控制

      1. 流量控制 - Flow Control 序言:数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制以免数据丢失.利用滑动窗口机制可以很方便的在TCP连接上实现对发 ...

  10. 获取Android版本信息和电话信息

    Android的版本信息可以通过android.os.Build获得,电话信息可以通过TelephonyManager获得,代码如下:     private void get_infor(){ sd ...