2015-06-08 67 views
1

我想为我的布局设置背景颜色,必须随机生成颜色,直到现在我使用此代码生成颜色,但颜色太暗,但我不想要这些深色,只需要光线和柔和的颜色。如何在android中随机生成光线和柔和的颜色?

Random rnd = new Random(); 
    int r = rnd.nextInt(155) + 100; // 128 ... 255 
    int g = rnd.nextInt(155) + 010; // 128 ... 255 
    int b = rnd.nextInt(155) + 001; // 128 ... 255 

    int clr = Color.rgb(r, g, b); 
+0

保存您想要在数组或某物中使用的颜色的RGB值。从数组中随机选择一个值。 –

回答

8

我不明白你为什么给每个通道添加不同的数字。目前的结果将是你主要生成红色。

此外,如果您将前导码0置于数字前面,则会将其解释为octal number。换句话说,它被解释为底座8

所以010实际上是一个八进制数和等价的十进制计数器是直观8001也是如此,但是在这种情况下,八进制数与小数一样。十进制中的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); 
} 

你可以选择浅灰色作为基础颜色,或者你喜欢的其他柔和颜色。您应该不会选择白色作为基础颜色,因为此时生成的颜色倾向于点亮白色文字以便可见。尝试稍深的色调或最好的结果,你喜欢一些柔和的颜色。

+0

我可以在颜色中添加亮度吗? –

+0

我不明白这是什么意思。 –

+0

我越来越轻我会改变常数,但你知道一些亮度嗯,我要去添加图片或问题参考。 –