华南理工大学无线电爱好者协会软件小组

Android 动画之属性动画(一)

2016-09-23  本文已影响84人  梁加盐

Android 动画之属性动画(一)#


说到动画,先给大家一点概念。众所周知,动画其实是很多帧的图片以小于人类眼睛所能识别最小的时间间隔进行播放,而Android里面的动画的原理就是通过一个 来管理一个 ,通过这个类,可以持续地改变这个值,画面本身与这个 相关,于是就相当于产生一帧一帧的画面,从而形成动画。

什么是属性动画(Property Animation),先来看看官方的解释

The property animation system is a robust framework that allows you to animate almost anything. You can define an animation to change any object property over time, regardless of whether it draws to the screen or not. A property animation changes a property's (a field in an object) value over a specified length of time.

它是为了弥补补间动画(Tween Animation)的缺陷所引入的,比起补间动画的优势有

  1. 补间动画只能对view对象进行操作,但是属性动画可以对任何Object的任何属性进行操作,不管是看见还可是不可见
  2. 补间动画只提供了移动,缩放,旋转,淡入淡出这几种动画,而补间动画则可以实现上述动画之外的更多效果
  3. 补间动画还有一个致命缺陷,就是它只是改变了View的显示效果而已,而不会真正去改变View的属性。什么意思呢?比如说,现在屏幕的左上角有一个按钮,然后我们通过补间动画将它移动到了屏幕的右下角,现在你可以去尝试点击一下这个按钮,点击事件是绝对不会触发的,因为实际上这个按钮还是停留在屏幕的左上角,只不过补间动画将这个按钮绘制到了屏幕的右下角而已,而属性动画则是完全改变了view的属性
  4. 但是补间动画 的建立时间会比 属性动画 动画要短,代码量也会更少,当补间动画可以满足所需要的动画效果时,首先使用补间动画!

The characteristics of an porperty animation##

在属性动画里面,有如下特性:

How Property Animation Works##

记住以上的几个特性后,接下来看看属性动画是怎样实现的:
下面是两个简单的例子,对于一个假想的Object对它的 x(位移)的属性进行动画


 figure 1.Example of a linear animation

 figure 2.Example of a non-linear animation

上述两个例子的动画效果是随着时间的变化,x的值发生变化,并且每10ms更新一次 x 值,从而实现了,但是也可以看到两个例子的区别是 例1 是匀速地进行位移,而 例2 则是变速的进行位移。也就是两者的Time interpolation 是不一样的。

创建一个动画需要创建一个ValueAnimator对象(当然接下来你会知道还有其他的)来对被动画的对象进行管理。它记录着动画的进程以及进行动画的属性的当前值。一个 ValueAnimator 封装(encapsulate)如下几个对象:

Property Animation 的内部是怎么运行的呢,与上面提到的四个对象有着重大关联:

  1. VulueAnimator 通过调用start()方法后,就会根据 Duration 和当前已经运行了多少时间去计算 elapsed fraction
  2. elapsed fraction 被计算出来后,就会去调用 TimeInterpolator ,然后 TimeInterpolator 就会相应地计算出interpolated fraction ,不同类型的 TimeInterpolator 就会计算出不同的值。比如 例1 中,在10ms的时候, elapsed fraction = 0.25, interpolated fraction = 0.25 而在 例2 中, elapsed fraction = 0.25, interpolated fraction = 0.15
  3. interpolated fraction 计算完成后,就会调用 TypeEvaluator ,根据 interpolated fraction 来计算出属性值,比如上述两个例子中 x = interpolated fraction * 40

API Overview##

(请在仔细复习一下 How Property Animation Works 这一部分)
Property Animation 有了一个初步了解之后,接下我们来看看属性动画的一些常用的类和方法

Animator类###

Evaluator类###

Evaluator 告诉 Animator 如何去计算给定的属性值。它根据 Animator 给定的数据来计算得出属性值,常用的 Evaluator 有如下

Interpolators类###

Time Interpolators 其实是一个时间的函数,根据时间,计算出 interpolated fraction ,不同的 Time Interpolators 决定了不同函数,比如说它可以是线性的,那么在动画播放的这段时间里,他是均匀变化的,它也可以是非线性的,比如说动画可以先加速后减速,下面列出一些系统默认的 Time Interpolators

大概了解了Property Animation的基础知识,下一篇将介绍如何具体使用属性动画
上一篇 下一篇

猜你喜欢

热点阅读