小编典典

Android上视图背景颜色的动画变化

all

你如何为Android上视图的背景颜色变化设置动画?

例如:

我有一个红色背景颜色的视图。视图的背景颜色变为蓝色。如何在颜色之间进行平滑过渡?

如果这不能通过视图来完成,那么欢迎使用替代方法。


阅读 97

收藏
2022-03-28

共1个答案

小编典典

我最终为这个问题找到了一个(相当不错的)解决方案!

您可以使用TransitionDrawable来完成此操作。例如,在可绘制文件夹中的 XML 文件中,您可以编写如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- The drawables used here can be solid colors, gradients, shapes, images, etc. -->
    <item android:drawable="@drawable/original_state" />
    <item android:drawable="@drawable/new_state" />
</transition>

然后,在实际 View 的 XML 中,您将在android:background属性中引用此 TransitionDrawable。

此时,您可以通过执行以下操作在您的代码命令中启动转换:

TransitionDrawable transition = (TransitionDrawable) viewObj.getBackground();
transition.startTransition(transitionTime);

或者通过调用反向运行转换:

transition.reverseTransition(transitionTime);

有关使用 Property Animation API 的另一种解决方案,请参阅答案,该答案在最初发布此答案时不可用。

您可以使用新的Property Animation Api进行彩色动画:

int colorFrom = getResources().getColor(R.color.red);
int colorTo = getResources().getColor(R.color.blue);
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
colorAnimation.setDuration(250); // milliseconds
colorAnimation.addUpdateListener(new AnimatorUpdateListener() {

    @Override
    public void onAnimationUpdate(ValueAnimator animator) {
        textView.setBackgroundColor((int) animator.getAnimatedValue());
    }

});
colorAnimation.start();

为了向后兼容 Android 2.x,请使用来自 Jake Wharton 的九个旧 Android 库。

getColor方法在 Android M 中已弃用,因此您有两种选择:

  • 如果您使用支持库,则需要将getColor调用替换为:

kotlin ContextCompat.getColor(this, R.color.red);

  • 如果您不使用支持库,则需要将getColor调用替换为:

scss getColor(R.color.red);

2022-03-28