属性动画 官方翻译

来源:互联网 发布:c语言的index函数用法 编辑:程序博客网 时间:2024/06/01 17:08


属性动画(PropertyAnimation

属性动画系统是一个强大到可以让你使任何物体产生动画的框架。你可以让对象的属性随着时间的变化而发生变化,不论它用没有在屏幕呈现出来。一个属性动画会在一段时间内改变某些属性。当你想要使某一对象发生动画效果时,你要制定该属性,例如它在屏幕上的位置、动画的持续时间以及动画间隔的一些属性。

你需要在属性动画中定义一下特征值。

  • 持续时间:Duration:你要声明动画的持续时间,默认为300ms

  • 时间插值(Timeinterpolation:你应该指定一个函数用于计算动画过程中的一些参数。

  • 重复的次数以及行为Repeat count andbehavior:

    你要指明当动画结束时,是否重复动画以及多久重复一次。你也可以指明动画在结束以后是否回到原来的状态。在动画的时候会重复设置这些属性,直到达到动画进行指定的次数。

  • 动画集合Animator sets:

    你可以组合一些动画到一个逻辑集合里,让这些动画一起、陆陆续续或者一定的延迟的进行。

  • 帧刷新的周期Frame refreshdelay:

    你可以指定多少时间刷新一次。默认是10ms,但是应用的刷新帧频速度最终取决于系统的运行速度(或者说极限速度)。

    原理


    首先,我们先来通过一个简单的动画例子来了解一下动画的原理。图1描述的是一个假象的物体在x属性上变化的动画,表现为屏幕上的水平运动。这个过程耗时40ms,水平一共移动了40像素。每10ms,物体在水平方向上移动了10像素。当40ms末,到动画结束的时候,物体位于水平位置40处。

    这是一个线性插值的动画例子,意味着物体以恒定的速度移动。

    1.线性动画的例子

    当然你也可以制定一个非线性的动画补间。图2描述的是一个在动画开始后加速结束前减速的虚拟物体,物体和之前一样在40ms的时间里移动了40个像素单位,但不是线性的。前面半个过程,物体处于加速状态,当物体过了中心点后,物体开始减速,直到动画结束。从图2中我们可以看见,物体在动画刚开始和快要结束时的运动距离比物体在动画的中间时刻的运动距离要小。

    2.非线性动画的例子

    下面我们来看一下属性动画的各个组成部分在上面这个动画例子里的作用过程。图3展示的就是这个过程。

    3.动画的计算过程

    The ValueAnimator 负责动画的计时工作,例如动画已经进行了多久,当前的属性值等。ValueAnimator 包含有一个能帮助定义动画补间的TimeInterpolator和帮助计算补间动画的属性值的TypeEvaluator对于图2这个例子, TimeInterpolator 应该使用 AccelerateDecelerateInterpolator TypeEvaluator 应该使用IntEvaluator.若要开始这动画,先要创造一个 ValueAnimator ,并给你期望的属性指定开始值和终止值,还有动画的间隔。当你调用 start() ,动画开始。在这个动画的过程中, ValueAnimator 会根据动画的当前进行的时间点和动画的总时长计算出一个介于01的动画完成率elapsed fraction,这个数表示当前已经完成动画的多少,0意味着0%1意味着100%。例如在图1中,10ms对应的小数值就是0.25,因为这个过程是40ms。当 ValueAnimator 计算好动画完成率时,它会调用 TimeInterpolator 来计算补间值 interpolated fraction。补间值将动画完成率对应成一个小数。例如,由于在图2中动画开始时缓慢加速,所以10ms时,图2的补间值0.15自然而然要比图10.25要小。而对于图1,补间值总等于动画完成率。当补间值计算好后,ValueAnimator 调用恰当的 TypeEvaluator,根据你希望发生动画的属性的起始值、终止值、动画间隔来计算进行动画的属性对应的值。对于例2,10ms的补间值为0.15,所以属性值为0.15*40-0=6

     API Demos 实例中的com.example.android.apis.animation 包中提供了很多的范例,可以帮助你掌握property animation system.的使用。

0 0
原创粉丝点击