Android 动画之属性动画(Property Animation)

本文详细介绍了Android属性动画Property Animation的原理和使用,包括Duration、Time interpolation、Repeat count和behavior等特性。讲解了ValueAnimator、ObjectAnimator、AnimatorSet、TypeEvaluator、Keyframe以及Animation Listeners等核心组件的工作方式,展示了如何实现自定义动画效果。
摘要由CSDN通过智能技术生成

Property Animation是谷歌在Android3.0的时候引入的,这个动画改变的是对象的实际属性,在视图动画(View Animation)中,改变的只是视图绘制的位置,而不是实际视图本身。

Property Animation允许我们定义动画的下列特征

Duration:动画的持续时间,默认为300ms。                     
Time interpolation:时间插值,如何根据动画当前经过的时间计算属性值。                                 
Repeat count and behavior:重复的次数和行为,指定动画在持续时间结束时是否重复播放,以及重复播放的方式,如顺序播放还是倒序播放。 
Animator sets:动画的集合,这些动画集合可以一起播放,顺序播放或在指定延迟后播放。 
Frame refresh delay:帧的刷新时间,默认为10ms。最终取决于硬件环境和当前系统状态。

Property Animation是如何工作的?

       

上图表示了一个线性插值的动画实例。它用x属性表示在屏幕上的水平位置,动画的持续时间设置为40ms,移动距离为40像素。每10ms,即默认的刷新速率,对象水平移动10个像素。在40ms的末尾,动画停止。并且动画停留在水平40像素的位置。 

ValueAnimator   
ValueAnimator  即表示一个动画,包含了要动画的属性的起始值和结束值,以及动画的持续时间。       

ValueAnimator   封装了一个TimeInterpolator,它定义了动画的插值方法。ValueAnimator还封装了一个TypeEvaluator,它定义了如何计算正在动画的属性的值。在整个动画过程中,ValueAnimator会根据动画的持续时间和已经过去的时间计算出一个时间因子。如上图中t=10ms时,时间因子为10ms / 40ms = 0.25。在计算出时间因子后会调用TimeInterpolator的值计算出插值因子。上图中插值因子总是与时间因子相同。在计算出插值因子后,ValueAnimator会调用适当的TypeEvaluator,根据动画的插值因子,动画的起始值和结束值计算出正在动画的属性值,在上图中t=10ms时插值因子为0.25,因此此时的改属性值为0.25 * (40-0) = 10。

可以通过ValueAnimator.ofXXX的静态方法来创建一个ValueAniamtor对象,这些ValueAnimator分别对不同的数据类型来进行动画,包括下面5种:
ofInt(),ofFloat(),ofArgb(),ofObject(),ofPropertyValuesHolder()。它们分别为Int类型的数据,Float类型的数据,颜色类型十六进制数据,自定义类型的数据,PropertyValuesHolder类型的数据进行动画。

一个属性动画包括两部分,计算动画值和正在动画的对象和属性上设置这些值。ValueAnimator只完成了第一部分,想要完成第二部分,必须实现Animator.AnimatorUpdateListener接口。

ValueAnimator.ofFloat(0f, 1f).apply {
    duration = 1000
    addUpdateListener { animation ->
        Float animatedValue = animation.animatedValue as Float
        Log.d("TAG", "currentValue is $animatedValue");
    }
    start()
}

上面中代码只是在Log中输入了一些信息,可以改为自己想做的工作。在ofFloat()方法中可以传入多个参数。这些参数的时间间隔均匀分布。下面的代码中表示在1秒钟内从0到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值