[英]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.