好吧,我正在尝试随机生成一种颜色,但有限制。
使RGB颜色仅在0到49之间。
它应该像这样:color.nextInt(50);正确?
这是绘制正方形的活动的代码:
public class Draw extends View
{
public Draw(Context context)
{
super(context);
}
Paint prop = new Paint();
Random color = new Random();
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int oriwidth = 0;
int oriheight = 0;
for (int x = 0; x < 20; x++)
{
int red = color.nextInt(50);
int green = color.nextInt(50);
int blue = color.nextInt(50);
prop.setARGB(0, red, green, blue);
canvas.drawRect(oriwidth += 10, oriheight += 10, width -= 10, height -= 10, prop);
}
}
}
结果是一个白色的正方形。如果没有限制,我就会很好。
你能让我在一组价值观之间画一个正方形吗?
感谢您的帮助,对不起英语。
答案 0 :(得分:2)
setArgb的第一个参数是透明度。您应该始终将其设置为255。
答案 1 :(得分:0)
为什么你被限制在50,因为最高限制是255。
int min = 0;
int max = 255;
int transparency=255;// from 0 to 255 ,255 means no transparency
Random r = new Random();
int red = r.nextInt(max - min + 1) + min;
int green= r.nextInt(max - min + 1) + min;
int blue= r.nextInt(max - min + 1) + min;
prop.setARGB(transparency, red, green, blue);
通过更改min,max,您可以限制颜色组合。 感谢
答案 2 :(得分:0)
就像我在评论中所说,你需要设置它的alpha透明度才能显示。
它“无限制”工作的原因是因为你为每个组件溢出了0...255
范围。没有参数的nextInt()
会从0...MAX_INT-1
生成一个数字。
要了解重要性,请查看Paint#setARGB()
的来源:
public void setARGB(int a, int r, int g, int b) {
setColor((a << 24) | (r << 16) | (g << 8) | b);
}
它正在做的就是将值转换并合并为一个“打包”int
。如果超出每个组件一个字节的范围,则行为为“未定义”。例如,如果您尝试将颜色定义为ARGB = 0,256,0,0
,则可以得到:
(a << 24) = 0
(r << 16) = 16777216
(g << 8) = 0
(b) = 0
(final) = 16777216
现在,如果您将其解压缩到组件,您可以看到问题。 16777216 >> 24 = 1
,所以它得到了alpha,其余的都归零了。如此有效,您现在拥有一种颜色ARGB = 1,0,0,0
基本上,当你“无限制地”运行它时, 分配了一个alpha,但这完全是无意的。请记住将组件限制为最多255个,即使您明确指定了alpha,或者最终可能会产生意外结果。