0

うーん、最大制限付きの変数を使って乱数を受け取るとき、制限の値を設定することはできません。

メソッド seekBarValue で制限を取得します。

color.nextInt(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 に答える