Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中从一组选定的颜色中输出随机颜色?(安卓)_Java_Android_Random_Colors - Fatal编程技术网

如何在Java中从一组选定的颜色中输出随机颜色?(安卓)

如何在Java中从一组选定的颜色中输出随机颜色?(安卓),java,android,random,colors,Java,Android,Random,Colors,所以我想让一个字符串在用户输入答案时被赋予一种随机颜色。我的问题是,我不确定如何使字符串的随机颜色成为特定范围的颜色。例如,如果我希望字符串随机变为蓝色、红色、绿色、粉色、白色或棕色。只有这些颜色,没有其他颜色 到目前为止,我使用以下代码从所有可能的RBG变化中管理了一个完全随机的颜色: Random rand = new Random(); int r = rand.nextInt(254)+1; int g = rand.nextInt(254

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

到目前为止,我使用以下代码从所有可能的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种不同的蓝色


如果有人能提出解决方案,我将不胜感激。谢谢。

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

创建所需颜色列表

这不是一个广泛的列表,但包括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);
更改文本视图颜色

现在我们可以改变颜色了。下面的一个示例位于按钮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值,以获得不同外观的紫色

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

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

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

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

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

编辑:为了获得更可接受的解决方案,请尝试学习十六进制颜色的工作原理。然后可以为某些颜色类型定义范围。从这里开始:

首先在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>
最后设置生成的颜色

view.setBackgroundColor(randomAndroidColor);  

来源于

检查。@AkashPatel谢谢,成功了。@H3II0欢迎……)@AkashPatel您是否愿意将其发布为我的答案,以将其标记为已解决?Android Studio的in array中没有“.add”选项。如何集成它?.add是LIST类的一个方法。为了使用。添加,您需要使用列表。您使用的是什么数据结构?我的例子是一个列表
int[] androidColors = getResources().getIntArray(R.array.androidcolors);
int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];
view.setBackgroundColor(randomAndroidColor);