如何在Java中从一组选定的颜色中输出随机颜色?(安卓)
所以我想让一个字符串在用户输入答案时被赋予一种随机颜色。我的问题是,我不确定如何使字符串的随机颜色成为特定范围的颜色。例如,如果我希望字符串随机变为蓝色、红色、绿色、粉色、白色或棕色。只有这些颜色,没有其他颜色 到目前为止,我使用以下代码从所有可能的RBG变化中管理了一个完全随机的颜色:如何在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
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);