ValueAnimator.REVERSE
效果:(即和上一次效果反着来)
4、旋转属性动画
旋转动画也比较简单,将一个View进行顺时针或逆时针旋转。
代码如下:
tvText.setOnClickListener {
val objectAnimation =
ObjectAnimator.ofFloat(tvText, “rotation”, 0f,180f,0f)
objectAnimation.duration=3000
objectAnimation.start()
}
ofFloat()
方法的可变长参数,如果后者的值大于前者,那么顺时针旋转,小于前者,则逆时针旋转。
三、AnimatorSet
如果想要一个动画结束后播放另外一个动画,或者同时播放,可以通过AnimatorSet
来编排。
val aAnimator=ObjectAnimator.ofInt(1)
val bAnimator=ObjectAnimator.ofInt(1)
val cAnimator=ObjectAnimator.ofInt(1)
val dAnimator=ObjectAnimator.ofInt(1)
AnimatorSet().apply {
play(aAnimator).before(bAnimator)//a 在b之前播放
play(bAnimator).with(cAnimator)//b和c同时播放动画效果
play(dAnimator).after(cAnimator)//d 在c播放结束之后播放
start()
}
或者
AnimatorSet().apply {
playSequentially(aAnimator,bAnimator,cAnimator,dAnimator) //顺序播放
start()
}
AnimatorSet().apply {
playTogether(animator,bAnimator,cAnimator,dAnimator) //同时播放
start()
}
另有:
AnimatorSet ().apply {
play(aAnimator).after(1000) //1秒后播放a动画
start()
}
四、ViewPropertyAnimator
如果只是针对View对象的特定属性同时播放动画,我们也可以采用ViewPropertyAnimator
。
例如:
tvText.animate().translationX(100f).translationY(100f).start()
支持属性:
- translationX、translationY、translationZ
- x、y、z
- alpha
- scaleX、scaleY
注意到ViewPropertyAnimator
对象具有property(Float)
和propertyBy(Float)
方法,其中property(Float)
是指属性变化多少(可以理解一次有效),而propertyBy(Float)
每次变化多少(可以理解多次有效)。
举例说明:
translationX
tvText.setOnClickListener {
val animator = tvText.animate()
animator.duration=1000
animator.translationX(100f)//点击一次会向右偏移,再点击没效果
animator.start()
}
translationXBy
tvText.setOnClickListener {
val animator = tvText.animate()
animator.duration=1000
animator.translationXBy(100f)//每次点击都会向右偏移
animator.start()
}