3

さて、ランダムに色を生成しようとしていますが、制限があります。

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

結果は白の完全な正方形です。制限がなければ、うまくいきます。

一連の値の間に四角形を描くことを正しく理解してもらえますか?

助けてくれてありがとう、そして英語でごめんなさい。

4

3 に答える 3

2

setArgb の最初のパラメーターは透過性です。常に 255 に設定する必要があります。

于 2013-09-26T18:27:00.990 に答える
0

上限が 255 であるため、50 に制限されている理由。

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

最小値、最大値を変更することで、色の組み合わせを制限できます。ありがとう

于 2013-09-26T18:36:37.207 に答える
0

コメントで言ったように、表示するにはアルファ透明度を設定する必要があります。

「制限なし」で機能した理由は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);
}

それがしているのは、値を1つの「パックされた」にシフトして結合することだけintです。コンポーネントごとに 1 バイトの範囲を超えると、動作は「未定義」になります。たとえば、色を として定義しようとすると、次のARGB = 0,256,0,0ようになります。

(a << 24) = 0
(r << 16) = 16777216
(g <<  8) = 0
(b)       = 0
(final)   = 16777216

これをコンポーネントに解凍すると、問題が表示されます。16777216 >> 24 = 1、そのため、アルファが得られ、残りはすべてゼロになります。効果的に、あなたは今色を持っていますARGB = 1,0,0,0


基本的に、「制限なし」で実行したときにアルファを割り当てていましたが、それは完全に意図的ではありませんでした。明示的にアルファを割り当てている場合でも、コンポーネントを最大 255 に制限することを忘れないでください。そうしないと、予期しない結果になる可能性があります。

于 2013-09-26T19:19:12.117 に答える