你如何为Android上视图的背景颜色变化设置动画?
例如:
我有一个红色背景颜色的视图。视图的背景颜色变为蓝色。如何在颜色之间进行平滑过渡?
如果这不能通过视图来完成,那么欢迎使用替代方法。
我最终为这个问题找到了一个(相当不错的)解决方案!
您可以使用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。
android:background
此时,您可以通过执行以下操作在您的代码命令中启动转换:
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);
scss getColor(R.color.red);