使用随机类获取随机颜色?

我的应用程序的要求是listview项目的浅色但不透明的颜色。 我有随机的颜色,但它经常很黑。 而且我不知道我可以在哪个范围内获得浅色。 随机给出的范围是这样的:

Random rndm = new Random(); int color = Color.argb(255, rndm.nextInt(256), rndm.nextInt(256), rndm.nextInt(256)); RelativeLayout rl=(RelativeLayout)rowView.findViewById(R.id.front); rl.setBackgroundColor(color); 

你想要更浅的颜色。 这意味着RGB分量值必须介于128和255之间。

由于Random.nextInt(int max)返回between 0 inclusive and max exclusive的int,您可能想尝试这样的事情:

 Random rnd = new Random(); int r = rnd.nextInt(128) + 128; // 128 ... 255 int g = rnd.nextInt(128) + 128; // 128 ... 255 int b = rnd.nextInt(128) + 128; // 128 ... 255 Color clr = Color.rgb(r, g, b); 

我向你指了一个想法,我将在这里解释:

 Random random = new Random(); int color = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256)); Bitmap bitmap = new Bitmap(context); bitmap.eraseColor(color); Palette.from(bitmap).getLightVibrantColor(); 

看到? 我正在创建一个虚拟的Bitmap ,用随机生成的颜色填充它,然后使用Palette API获得“浅色的”颜色。

通常,您需要其中一个RGB值大于128才能获得明亮的颜色,因此拾取3个随机值,并检查一个大于128的值就足够了。 价值越大,它就越亮。

你可以检查平均值是否大于128,它可以带来好的结果。

 public int getRandomColor() { Random rndm = new Random(); int r = rndm.nextInt(256); int g = rndm.nextInt(256); int b = rndm.nextInt(256); int adjust = 0; if( (r + g + b)/3 < 128) int adjust = (128 - (r + g + b)/3)/3; r += adjust; g += adjust; b += adjust; return Color.argb(255, r, g, b); } 

要获得明亮的随机颜色,您需要每个通道都有一些最小值。

这是代码:

 // minimumBrightnessRatio between 0 and 1. 1 = all white, 0 = any possible color. Best results would be 0.5. public int getRandomColor(float minimumBrightnessRatio) { Random rndm = new Random(); final int minimumColorValue = (int)(255f * minimumBrightnessRatio); final int variableColorValue = 255 - minimumColorValue; final int r = minimumColorValue + rndm.nextInt(variableColorValue); final int g = minimumColorValue + rndm.nextInt(variableColorValue); final int b = minimumColorValue + rndm.nextInt(variableColorValue); return Color.argb(255, r, g, b); } 

您需要限制您选择的颜色空间。 现在你正在使用整个RGB光谱,其中一半是深色。 因此,我建议您为所有通道设置基线颜色范围(通过实验或查看您最喜欢的图形程序的颜色选择器),然后将该基线上方的范围随机化。

 final int basec = 128; //baseline would be 50% gray Random rndm = new Random(); int color = Color.argb(255, basec + rndm.nextInt(256-basec), basec + rndm.nextInt(256-basec), basec + rndm.nextInt(256-basec)); RelativeLayout rl=(RelativeLayout)rowView.findViewById(R.id.front); rl.setBackgroundColor(color); 

在处理光强时(在你的情况下,你需要浅色), HSI model就派上用场了。 您可以随机生成0.8到1之间的强度,并随机化色调和饱和度。 然后将其转换为RGB。