Android-设置动画

时间:2019-04-12 20:55:39

标签: android android-animation objectanimator

我正在尝试在同一视图上制作两个动画:一个用于backgroundTint,一个用于缩放...使用ObjectAnimator.ofPropertyValuesHolder最有意义,因为您可以列出表示动画的propertyValueHolder。我有这样的东西:

val enabledColor = context.getColor(R.color.colorAccent)
val disabledColor = context.getColor(R.color.colorDisabled)       

val anim = ObjectAnimator.ofPropertyValuesHolder(imgBackground,
        PropertyValuesHolder.ofFloat(View.SCALE_X, 1F, 1.2F),
        PropertyValuesHolder.ofFloat(View.SCALE_Y, 1F, 1.2F),
        PropertyValuesHolder.ofInt("colorFilter", enabledColor, disabledColor)
)

但是,colorFilter(背景色)在为Int动画时没有正确地设置动画。当动画播放background_tint时,到处都是:黄色,绿色等。希望保持这种风格-使用ObjectAnimator对所有动画进行分组。

以前,我有:

    ObjectAnimator.ofArgb(imgBackground, colorAnimProperty, disabledColor, enabledColor)
    val scaleUpAnim = ObjectAnimator.ofPropertyValuesHolder(imgBackground,
        PropertyValuesHolder.ofFloat(View.SCALE_X, 1F, 1.2F),
        PropertyValuesHolder.ofFloat(View.SCALE_Y, 1F, 1.2F)
    )

哪个可以解决问题,但这很不方便,因为我需要一个AnimationSet来组合它们...

如何使用PropertyValuesHolder编写background_tint动画?

1 个答案:

答案 0 :(得分:0)

发现我们可以为PropertyValuesHolder提供一个为我们进行计算的Evaluator函数。方便地,有一个ArgsEvaluator。因此,它看起来像这样:

animEnable = ObjectAnimator.ofPropertyValuesHolder(imgBackground,
        PropertyValuesHolder.ofFloat(View.SCALE_X, 1F, 1.2F),
        PropertyValuesHolder.ofFloat(View.SCALE_Y, 1F, 1.2F),
        PropertyValuesHolder.ofObject("colorFilter", ArgbEvaluator(), disabledColor, enabledColor))