我正在尝试使用以下代码为RelativeLayout
上的Android Studio
设置动画,以通过随机的背景色循环显示:
public static void fadeLayoutColour(RelativeLayout rLayout, long timeMills) {
// Here are the random values
int randAlpha = ThreadLocalRandom.current().nextInt(0, 0xff);
int randRed = ThreadLocalRandom.current().nextInt(0, 0xff);
int randGreen = ThreadLocalRandom.current().nextInt(0, 0xff);
int randBlue = ThreadLocalRandom.current().nextInt(0, 0xff);
int randColor = ThreadLocalRandom.current().nextInt(0xff000000, 0xffffffff);
// The animation
ObjectAnimator colourFade = ObjectAnimator.ofObject(rLayout,
"backgroundColor",
new ArgbEvaluator(),
Color.argb(randAlpha, randRed, randGreen, randBlue), randColor);
colourFade.setDuration(timeMills);
colourFade.setRepeatCount(Animation.INFINITE);
colourFade.setRepeatMode(ValueAnimator.REVERSE);
colourFade.start();
}
问题在于此代码选择了随机数,然后在此处停止。
动画有效,但是一旦选择了随机值,它们将保持原样。因此,虽然我希望它可以通过随机的颜色循环,但只能通过两种颜色循环。这意味着我必须不断更新随机值。
我该怎么做?
答案 0 :(得分:1)
我这里没有设置Android项目来尝试一下,但是我会首先尝试一下:
ObjectAnimator
是Animator
:
java.lang.Object
↳ android.animation.Animator
↳ android.animation.ValueAnimator
↳ android.animation.ObjectAnimator
因此,您可以将Animator.AnimationListener添加到ObjectAnimator
中。使用其addListener(Animator.AnimatorListener listener)方法。
该侦听器有一个onAnimationEnd()方法,您可以在其中回调fadeLayoutColour
方法。那应该重新计算随机值并重新运行动画。
答案 1 :(得分:1)
public static void fadeLayoutColour(RelativeLayout rLayout, long timeMills) {
final ThreadLocalRandom r = ThreadLocalRandom.current();
final ObjectAnimator colourFade = ObjectAnimator.ofObject(rLayout, "backgroundColor", new ArgbEvaluator(),
Color.argb(255, r.nextInt(256), r.nextInt(256), r.nextInt(256)),
Color.argb(255, r.nextInt(256), r.nextInt(256), r.nextInt(256)));
colourFade.setDuration(timeMills);
colourFade.setRepeatCount(Animation.INFINITE);
colourFade.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {}
@Override
public void onAnimationCancel(Animator animation) { }
@Override
public void onAnimationRepeat(Animator animation) {
colourFade.setObjectValues(colourFade.getAnimatedValue(),
Color.argb(255, r.nextInt(256), r.nextInt(256), r.nextInt(256)));
}
});
colourFade.start();
}
答案 2 :(得分:0)
有一种代码可以生成随机颜色。
new Color((int)(Math.random() * 0x1000000));
如果不改变工作范围,则可以在上面使用,否则可以使用随机的方法。
int R = (int)(Math.random()*256);
int G = (int)(Math.random()*256);
int B= (int)(Math.random()*256);
Color color = new Color(R, G, B); //random color, but can be bright or dull
//to get rainbow, pastel colors
Random random = new Random();
final float hue = random.nextFloat();
final float saturation = 0.9f;//1.0 for brilliant, 0.0 for dull
final float luminance = 1.0f; //1.0 for brighter, 0.0 for black
color = Color.getHSBColor(hue, saturation, luminance);