如何在一段时间后生成新的随机整数?
How can I generate new random integers after a time interval?
我正在尝试使用以下代码为 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();
}
问题是此代码选择了随机数并停在那里。
动画有效,但一旦选择了随机值,它们就会保持原样。因此只循环使用两种颜色,尽管我希望它循环使用随机颜色。这意味着我必须不断更新随机值。
我该怎么做?
我这里没有 Android 项目设置来试一试,但我会先尝试一下:
ObjectAnimator
是一个 Animator
:
java.lang.Object
↳ android.animation.Animator
↳ android.animation.ValueAnimator
↳ android.animation.ObjectAnimator
所以你或许可以添加一个 Animator.AnimationListener to your ObjectAnimator
. Using its addListener(Animator.AnimatorListener listener) 方法。
这个侦听器有一个 onAnimationEnd() 方法,您可以在其中回调 fadeLayoutColour
方法。那应该重新计算随机值并重新运行动画。
有一行代码生成随机颜色。
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);
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();
}
我正在尝试使用以下代码为 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();
}
问题是此代码选择了随机数并停在那里。
动画有效,但一旦选择了随机值,它们就会保持原样。因此只循环使用两种颜色,尽管我希望它循环使用随机颜色。这意味着我必须不断更新随机值。
我该怎么做?
我这里没有 Android 项目设置来试一试,但我会先尝试一下:
ObjectAnimator
是一个 Animator
:
java.lang.Object
↳ android.animation.Animator
↳ android.animation.ValueAnimator
↳ android.animation.ObjectAnimator
所以你或许可以添加一个 Animator.AnimationListener to your ObjectAnimator
. Using its addListener(Animator.AnimatorListener listener) 方法。
这个侦听器有一个 onAnimationEnd() 方法,您可以在其中回调 fadeLayoutColour
方法。那应该重新计算随机值并重新运行动画。
有一行代码生成随机颜色。
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);
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();
}