property动画是一个强大的框架,它差点儿能使你动画不论什么东西。
你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上。
一个属性动画在一定时间内多次改变一个属性(对象的一个字段)的值。要动画某个东西。你需指定对象的目标属性。比方位置,动画的持续时间。和改变的值的范围。
属性动画系统同意你指定下面动画属性:
· Duration: 动画持续时间。
默认是300 ms.
· Time interpolation: 你能够指定一个函数来定义怎样跟据当前的时间计算属性的值。
· 反复次数和行为: 你能够指定是否当动画结束时又一次開始以及反复的次数。你还是能够指定是否让动画倒着播放。设置动画倒着播放使得动画先正播再倒播这样反复进行。直到到达所限制的反复次数。
· 动画集: 你能够将多个动画在逻辑上放到一个组中一起播放或依次播放或按指定的延迟时间播放。
· Frame refresh delay: 你能够指定动画的帧刷新频率。默认是设置为10 ms。可是你的应用能刷新帧的实际速度终于决定于系统的忙碌程度和系统执行后台代码的速度。
· 属性动画怎样工作
首先,我们用一个样例来大体了解一下一个动画怎样工作。下图描写叙述了某个对象要动画其x属性。这代表它的横向位置。动画持续时间被设置为40 ms而且其动画距离被设置为40 像素。每10 ms移动10像素。在40ms后,动画停止。对象停在了40的位置上。
这是一个使用线性插值的对象,表示对象匀速移动。
图 1. 线性动画的样例
你也能够使用非线性插值的动画。下图演示了一个開始加速,最后减速的动画。对象还是在40秒内移动40像素,可是是非线性的。
開始加速到半路然后减速直到最后。就像下图所看到的。開始和结束时移动的距离比中间移动的距离短。
图 2. 非线性动画的样例
让我们细致看一下属性动画系统是怎样计算上图所看到的的动画的重要部分的。
下图演示了主要类之间怎样相互操作。
Figure 3. 动画是怎样计算的
ValueAnimator 对象保持追踪动画的时间,比方动画已执行了多长时间,以及属性的当前值。
ValueAnimator 封装了一个TimeInterpolator, 它定义了动画插值算法,还封装了一个TypeEvaluator,它定义了怎样去计算属性的值。比如,在图2中,使用的TimeInterpolator是 AccelerateDecelerateInterpolator 而且使用的TypeEvaluator 是IntEvaluator.
要開始一个动画,需创建一个ValueAnimator 然后告诉它所要动画的属性的開始和结束的值,还有动画持续的时间。当你调用start() 时,动画就開始了。在动画进行期间。ValueAnimator 跟据动画的持续时间和已经过的时间,计算出一个表示进度的比例的分数(0和1之间),进度分数代表了动画已进行的时间的百分比,0代表0%,1代表100%。
比如,图1中进度分数 在t = 10 ms时值为.25,由于总时间是t = 40 ms。
当ValueAnimator 计算完毕一个进度分数,它就调用TimeInterpolator 去计算一个插值分数。插入分数结合所设置的时间插值把进度分数映射到一个新的分数。比如。在图2中,由于动画缓慢加速,在 t = 10 ms时。插值分数为.15,小于进度分数为.25。在图1中,插值分数进度分数永远相等。
当计算插值函数时。ValueAnimator 会调用适当的TypeEvaluator来基于插值函数、開始值、结束值计算你在动画的属性的值。
比如,在图2中,插值函数值在 t = 10 ms时为.15 。所以些时属性的值将是.15 X (40 - 0)。或6。
Android非常多时候要用NDK开发,对于C语言不是非常熟悉的小伙伴,能够看一下本人录制的视频教程:http://edu.csdn.net/course/detail/2057
希望对你们有所帮助!