如何在android中随机生成浅色和柔和的颜色?

时间:2015-06-08 07:44:34

标签: java android colors

我想为我的布局设置背景颜色,颜色必须随机生成, 到目前为止,我使用此代码生成颜色,但颜色太深,但我不想要这些深色,只需要浅色和柔和的颜色。

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);

2 个答案:

答案 0 :(得分:10)

我不明白为什么要为每个频道添加不同的号码。目前的结果是您主要生成红色。

此外,如果您将前导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);
}

您可以选择浅灰色作为基色或其他一些您喜欢的柔和色。您可能不应该选择白色作为基色,因为生成的颜色往往是亮的,白色文本很容易看到。尝试稍微深一点的色调或最好的结果你喜欢的一些柔和的颜色。

答案 1 :(得分:0)

产生几乎白色但从不白色的更好解决方案是:

final int base = 255,
                min = 26,
                max = 35;
final int red = base - random(min, max);
final int green = base - random(min, max);
final int blue = base - random(min, max);

int color = Color.rgb(red, green, blue);

使用此方法创建随机整数(之前将随机变量定义为public static final Random random = new Random();

//min and max inclusive
public static int random(int min, int max) {
   if(min >= max)
       throw new RuntimeException("min is >= max!");

   return random.nextInt(max - min + 1) + min;
}

您可以为各种不同的随机颜色编辑最小值和最大值。