我不明白你为什么给每个通道添加不同的数字。目前的结果将是你主要生成红色。
此外,如果您将前导码0
置于数字前面,则会将其解释为octal number。换句话说,它被解释为底座8
所以010
实际上是一个八进制数和等价的十进制计数器是直观8
。 001
也是如此,但是在这种情况下,八进制数与小数一样。十进制中的1
等于十进制中的1
。
此外,您不使用种子为您的Random
实例。这非常糟糕,因为这意味着您将始终生成完全相同的颜色。你需要使用一个足够随机的种子,如System.currentTimeMillis()
。
但是,让我们的一点是:
您可以通过随机挑选值为每个通道,然后用白色或与另一种柔和的色彩混合,生成随机柔和的色彩。试试这样的:
final Random mRandom = new Random(System.currentTimeMillis());
public int generateRandomColor() {
// This is the base color which will be mixed with the generated one
final int baseColor = Color.WHITE;
final int baseRed = Color.red(baseColor);
final int baseGreen = Color.green(baseColor);
final int baseBlue = Color.blue(baseColor);
final int red = (baseRed + mRandom.nextInt(256))/2;
final int green = (baseGreen + mRandom.nextInt(256))/2;
final int blue = (baseBlue + mRandom.nextInt(256))/2;
return Color.rgb(red, green, blue);
}
你可以选择浅灰色作为基础颜色,或者你喜欢的其他柔和颜色。您应该不会选择白色作为基础颜色,因为此时生成的颜色倾向于点亮白色文字以便可见。尝试稍深的色调或最好的结果,你喜欢一些柔和的颜色。
保存您想要在数组或某物中使用的颜色的RGB值。从数组中随机选择一个值。 –