前言

Property Animation是Android3.0引入的一种功能强大的动画系统。它除了可以给普通的View添加动画效果外,还可以给对象添加效果。另外,Property Animation与Tween Animation一个最大的区别是Property Animation更改是对象的实际属性,而后者只是View的绘制效果,比如一个Button实现一个移动的动画效果,如果使用Tween Animation 的话,Button 的点击位置并不会随着动画的移动效果儿移动。换句话说在新位置Button是可能没有点击事件的。使用Property Animation可以设置下面的一些动画特性:

  • Duration: 动画之间的间隔

  • Time interpolation: 属性值的变化方式,可以表示为动画的事件函数,例如线性动画,加速动画等等。

  • Repeat count and behavior: 动画的重复次数和重复方式。

  • Animation sets: 动画集合

  • Frame refresh delay: 帧刷新间隔,默认是10ms,但具体的速度依赖于系统的繁忙程度。

属性动画的工作原理

图1描绘了一个假象的对象x属性的动画,它给出了该对象在屏幕水平方法的位置,在40ms内改对象移动了40个像素。每10ms记录一次对象移动的像素,这个动画是的Time interpolation是liearinterpolation,表明动画是以恒定的速度移动的。

在Property Animation中,ValueAnimator是其核心类,它记录了动画自身的一些属性值。图2是其工作流程:

动画在整个过程中,会根据我们当初设置的TimeInterpolator和TypeEvaluator的计算方式计算出不通的属性值,从而不断的改变属性值的大小,就会产生各式各样的动画效果。

下面就通过一个实例理解一下什么是TimeInterpolator和TypeEvaluator.

  • TimeInterpolator

TimeInterpolator翻译过来是插值器,插值器定义了动画变化中的属性变化规则,它根据时间比例因子计算出一个插值因子,那么什么是时间比例因子呢,简单讲就是:

时间比例因子 = 动画已执行的时间 / 动画执行的总时间

而插值因子,用于设定动画是线性变化,还是非线性变化等千万中变化,你可以通过实现TimeInterpolator来实现自己的插值器(在>sdk22可以继承抽象类BaseInterpolator)。Android中默认的定义很多的插值器:

  1. AccelerateDecelerateInterpolator

    在开始和结束时速度较慢

  2. AccelerateInterpolator

    加速变化

  3. LinearInterpolator

    匀速变化

更多的插值器,可以在这里查看.

//自定义插值器class MyInterpolator implements TimeInterpolator{    @Override    public float getInterpolation(float input) {        //自定义的规则        return 0;    }}
  • TypeEvaluator

TypeEvaluator是根据插值因子去计算属性值,Android默认可以识别的类型为int, float和颜色,分别是

IntEvalutor, FloatEvalutor, ArgbEvaluator.

  1. IntEvalutor

    计算整数型

  2. FloatEvalutor

    计算浮点型

  3. ArgbEvaluator

    计算颜色属性

//自定义TypeEvaluatorclass MyTypeEvaluator implements TypeEvaluator<Ball>{    @Override    public Ball evaluate(float fraction, Ball startValue, Ball endValue) {        //自己的规则        return null;    }}

下面以三个小球的旋转效果为例,了解一下属性动画的整个实现过程。

源码可以看这里

更多相关文章

  1. Android—高级组件对应属性大全及使用详例
  2. android.widget.TextView 属性详解
  3. android 资源文件命名规则 drawable mipmap一样的
  4. android:layout_weight属性详解
  5. Android(安卓)动画框架原理
  6. Android(安卓)animation 之视图动画、帧动画、属性动画的简单使
  7. Animation
  8. Android布局文件的属性值解析
  9. 在程序中用Java代码设置android:gravity, android:layout_Gravit

随机推荐

  1. php数据类型的转换与检测、变量的基础知
  2. 技术债是什么、怎么还?你想知道的都在这一
  3. 为什么学习Python?使用哪个系统比较好?
  4. Netscaler添加首页下载连接
  5. Kubernetes Pod驱逐策略
  6. Kubernetes Pod水平自动伸缩(HPA)
  7. git常用命令
  8. OpenKruise v0.8.0 版本发布:K8s 社区首个
  9. Linux运维入门教程01-02 (UNIX和Linux操
  10. 冲着这份大数据分析案例,我立马下载该分析