安卓利用动画设置背景颜色

Posted 心脏dance

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓利用动画设置背景颜色相关的知识,希望对你有一定的参考价值。

利用插值器和 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() 

以上是关于安卓利用动画设置背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何在页面转换时为背景颜色设置动画

如何为 QPushButton 的背景颜色设置动画(动态更改按钮颜色)

如何在qt中为QPushButton的背景颜色设置动画?

页面加载时自动为页面的背景颜色设置动画[重复]

在 Swift 中为选定的 UIPickerView 行设置动画背景颜色

在 WPF 中使用情节提要为网格背景颜色设置动画