Android - 如何生成带限制的随机颜色?

时间:2013-09-26 18:21:00

标签: android view random colors draw

好吧,我正在尝试随机生成一种颜色,但有限制。

使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);
        }
    }
}

结果是一个白色的正方形。如果没有限制,我就会很好。

你能让我在一组价值观之间画一个正方形吗?

感谢您的帮助,对不起英语。

3 个答案:

答案 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,或者最终可能会产生意外结果。