利用插值器和 ArgbEvaluator() 来做的
插值器用来做动画,ArgbEvaluator() 用来做颜色渐变
插值器的使用:安卓插值器(ValueAnimator)_心脏dance的博客-CSDN博客_安卓valueanimator
ArgbEvaluator()的使用:看代码和注释即可
上代码:
private var valueAnimator: ValueAnimator? = null
private val evaluator by lazy {
ArgbEvaluator()
}
/**
* 背景色渐变动画
*/
private fun startValueAnimator(view: View) {
valueAnimator = ValueAnimator.ofFloat(0f, 1f)
valueAnimator?.addUpdateListener { animation ->
val value = animation.animatedValue as Float
view.setBackgroundColor(
evaluator.evaluate(
value, // 渐变的位置,从 0-1 即:【red - green】
ContextCompat.getColor(context, R.color.red), // 开始的颜色
ContextCompat.getColor(context, R.color.green) // 结束的颜色
) as Int
)
}
valueAnimator?.addListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator?) {
view.setBackgroundColor(ContextCompat.getColor(context, R.color.red))
}
override fun onAnimationEnd(animation: Animator?) {
view.setBackgroundColor(ContextCompat.getColor(context, R.color.green))
}
override fun onAnimationCancel(animation: Animator?) {
view.setBackgroundColor(ContextCompat.getColor(context, R.color.green))
}
override fun onAnimationRepeat(animation: Animator?) {
}
})
valueAnimator?.duration = 521L // 动画的时间
valueAnimator?.start()
}
注意:因为动画在播放设置背景颜色的时候,持有了view的引用,所以如果你的渐变时间过长,记得不想渐变的时候(比如view看不见了,不需要展现动画了),把动画关了,否则会造成内存泄漏。关闭的语句为: valueAnimator?.cancel()