繁体   English   中英

如何从Java中的一组选定颜色输出随机颜色? (机器人)

[英]How to output a random color from a set of selected colors in Java? (Android)

所以我想在用户输入答案的任何时候给字符串一个随机颜色。 我的问题是,我不确定如何使字符串的随机颜色成为特定范围的颜色。 例如,如果我希望字符串随机变为蓝色,红色,绿色,粉红色,白色或棕色。 只有这些颜色,没有其他。

到目前为止,我使用以下代码管理了所有可能的RBG变体中的完全随机颜色:

Random rand = new Random();
            int r = rand.nextInt(254)+1;
            int g = rand.nextInt(254)+1;
            int b = rand.nextInt(254)+1;

            int randomColor = Color.rgb(r,g,b);
            word.setTextColor(randomColor);

虽然如前所述,但这并非我的目标。 而不是这个,我想要设置颜色,可以随机应用于字符串。 这些是我要选择的颜色,然后随机设置为字符串颜色。 这样就可以在我不想要的范围内设置完全随机的颜色。 例如,我最终会得到5种蓝色变体。

如果有人能提出解决方案,我会很感激。 谢谢。

首先在color.xml中定义颜色并创建它的数组。

<?xml version="1.0" encoding="utf-8"?>
<resources>

<item name="blue" type="color">#FF33B5E5</item>
<item name="purple" type="color">#FFAA66CC</item>
<item name="green" type="color">#FF99CC00</item>
<item name="orange" type="color">#FFFFBB33</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item>
<item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#FFCC0000</item>

<integer-array name="androidcolors">
    <item>@color/blue</item>
    <item>@color/purple</item>
    <item>@color/green</item>
    <item>@color/orange</item>
    <item>@color/red</item>
    <item>@color/darkblue</item>
    <item>@color/darkpurple</item>
    <item>@color/darkgreen</item>
    <item>@color/darkorange</item>
    <item>@color/darkred</item>
</integer-array>

</resources>

现在在onCreate方法中生成如下所示的随机颜色。

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

最后设置这个生成的颜色。

view.setBackgroundColor(randomAndroidColor);  

来源取自这里

一种简单的方法是定义颜色列表。 然后使用随机选择您的操作中的一种颜色。

创建所需颜色列表

这不是一个广泛的列表,但包括4种颜色,红色,蓝色,绿色和粉红色。

List<Integer> colors = new ArrayList<>();
colors.add(Color.rgb(235,22,220));
colors.add(Color.BLUE);
colors.add(Color.GREEN);
colors.add(Color.RED);

创建一个返回随机颜色的简单方法

现在我们只需要一个从列表中返回随机颜色的方法。 这是一个惊人的2行长。

private int randomColor(){
    Random rand = new Random();
    return colors.get(rand.nextInt(colors.size()));
}

更改textview颜色

现在我们可以改变颜色。 下面的示例位于onClickListener按钮中。 你也可以在这里添加一些验证,以确保你没有得到重复的颜色,连续两次说蓝色。

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int color = randomColor();
        if(txtView.getCurrentTextColor() != color){
             txtView.setTextColor(color);
        }else{
             txtView.setTextColor(randomColor());
        }
    }
});

简单,干净,快速写入。

边注:

rand.nextInt(254)+1; 

生成1到255之间的数字,但颜色范围在0到255之间,所以

rand.nextInt(256); 

应该真的包括所有可能性。

现在回答你的问题

如果你只想在一定数量的颜色之间进行变化,不要随机选择所有1600万种可能性,而是预定义一组漂亮的颜色。

要么创建一个具有预定义颜色的数组,只是随机选择一个,或者生成颜色但限制结果:

    int r = 0;
    int g = 0;
    int b = 0;
    switch(rand.nextInt(8)){    // switch over 8 possible colors
        case (0):   // red
            r = 205;
            break;
        case (1):   // green
            g = 205;
            break;
        case (2):   // blue
            b = 205;
            break;
        case (3):   // pink
            r = 255;
            g = 20;
            b = 147;
            break;
        case (4):   // yellow
            r = 200;
            g = 200;
            break;
        case (5):   // magenta
            r = 200;
            b = 200;
            break;
        case (6):   // orange
            r = 255;
            g = 165;
            break;
        case (7):   // purple
            r = 128;
            b = 128;
            break;
    }

这当然是一个“大”的解决方案,但会避免创建一个驻留在你的内存中的数组。

使用颜色选择器工具可以了解RGB值的工作原理。 例如,如果你保持R = 255然后设置G = B =某个相同的数字,你会得到一些红色。 绿色和蓝色相同。 但是,如果你保持另外两个相同并仅更改剩余值,它将再次返回更亮或更暗的红色,绿色或蓝色版本(取决于该剩余值是R,G还是B)。 这种切割适用于每种颜色。 所以,例如,找一个紫色。 然后,您必须相同地更改两个RGB值,以获得不同的Purples。

示例:R = 255,G = 65,B = 255是紫色。

R = 190,G = 65,B = 190也是紫色。

R = 190,6 = 95,B = 190也是紫色。

但是,有一个范围。 我的意思是,价值不能总是0-255。 要找到该范围,您可以简单地尝试几个值来查找最小值和最大值。

记住,这只是一个捷径,但我认为它对你来说足够有用。

编辑:有关更可接受的解决方案,请尝试了解十六进制颜色的工作原理。 然后,您可以定义某些颜色类型的范围。 从这里开始: http//blog.digitaltutors.com/understanding-hexadecimal-colors-simple/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM