android如何生成不同 color 比去年time

标签: Java Android
发布时间: 2017/3/19 15:57:16
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

colors.xml 我有这 Array :

<item name="purple" type="color">#FFAA66CC</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkred" type="color">#FFCC0000</item>

<integer-array name="androidcolors">
    <item>@color/purple</item>
    <item>@color/red</item>
    <item>@color/darkpurple</item>
    <item>@color/darkred</item>
</integer-array>

我生成随机 color

int[] androidColors = getResources().getIntArray(R.array.androidcolors);
int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];
button1.setBackgroundColor(randomAndroidColor);

工程很好,但有时它作为最后生成相同 time 。如何解决此问题?

解决方法 1:

首先,不要创建 new Random()time 你想要一个新 color ,这是两者计算代价昂贵,完全破坏类的分布属性 Random !!! 只是创建一个 static 实例的 Random ,然后重用它。

现在为你实际的问题。 您将需要记住你生成这样就可以避免重复它的最后一个值。 创建一个静态变量或您正在使用的类的实例变量。 让我们叫它 lastColorIndex ,并将它初始化为随机选择 color

static Random rnd = new Random();
static int lastColorIndex = rnd.nextInt(androidColors.length);

若要生成非重复的颜色,现在你可以︰

int randomColorIndex = rnd.nextInt(androidColors.length - 1);
if (randomColorIndex >= lastColorIndex) {
   ++randomColorIndex;
}
lastColorIndex = randomColorIndex;

button1.setBackgroundColor(androidColors[randomColorIndex]);

要生成 randomColorIndex ,你有一个选择却比少的颜色数,因为你使用的最后一个被排除在外。 如果您生成的索引大于或等于使用最后一个,你增加它。 这会导致结果均匀分布于全方位的指数全部的 lastColorIndex

赞助商