0

好吧,当使用具有最大限制的变量接收随机数时,我无法设置限制的值。

我通过方法 seekBarValue 得到限制。

当我调用 color.nextInt(value); 它在那里崩溃,我不知道发生了什么。我可以插入一个数字,value变量是一个整数值,所以我看不出问题出在哪里。

之前调用了 seekBarValue 方法

public class Draw extends View 
{
    public Draw(Context context) 
    {
        super(context);
    }

    Paint prop = new Paint();
    Random color = new Random();
    int value;

    @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(value);//crashes here
            int green = color.nextInt(value);
            int blue = color.nextInt(value);

            prop.setARGB(255, red, green, blue);
            canvas.drawRect(oriwidth += 10, oriheight += 10, width -= 10, height -= 10, prop);
        }

    public int seekBarValue (int seekValue)
    {
        value=seekValue;
        return value;
    }
}

你能帮助我吗?

4

1 回答 1

1

您从不调用seekBarValue方法,因此变量value保留0为默认值,因此您正在调用

color.nextInt(0);

抛出一个IllegalArgumentException. nextInt参数必须大于0


编辑

为避免异常,请尝试这些更改。-

@Override
protected void onDraw(Canvas canvas) 
{
    super.onDraw(canvas);

    if (value > 0) {
        int width = getWidth();
        int height = getHeight();

        int oriwidth = 0;
        int oriheight = 0;      

        for (int x = 0; x < 20; x++) 
        {
            int red = color.nextInt(value);//crashes here
            int green = color.nextInt(value);
            int blue = color.nextInt(value);

            prop.setARGB(255, red, green, blue);
            canvas.drawRect(oriwidth += 10, oriheight += 10, width -= 10, height -= 10, prop);
        }
    }
}

或者只是确保value大于0

value = Math.max(value, 1);

此外,您需要invalidate在设置新值后查看视图,以便onDraw调用方法。如果您onDraw从您的活动中手动调用(正如我猜测的那样),请不要。

public int setValue(int value)
{
    this.value = value;
    invalidate();
    return value;
}
于 2013-09-27T11:09:06.133 回答