3

for ループを使用して数値的にパターン化された名前を持つ複数の変数を作成できないことはわかっていますが、何らかのループを使用して次のコード行を簡略化する方法はありますか? そうでなければ、それはほとんど何もしない非常に長いファイルであり、私はそれが好きではありません! これが私のコードの短縮版です。

public DrawGrid(Context context, int[] binary) {...
sq00c = binary[0];  
sq01c = binary[1];  
sq02c = binary[2]; ...etc}

Rect sq00 = new Rect(); Paint sq00p = new Paint();  int sq00c;  
Rect sq01 = new Rect(); Paint sq01p = new Paint();  int sq01c;  
Rect sq02 = new Rect(); Paint sq02p = new Paint();  int sq02c; ...ect

protected void onDraw(Canvas canvas) {...
sq00.set(2*sqsize, line0, 3*sqsize, line0+sqsize);  sq00p.setColor(sq00c);  sq00p.setStyle(Paint.Style.FILL);   canvas.drawRect(sq00, sq00p);       
sq01.set(3*sqsize, line0, 4*sqsize, line0+sqsize);  sq01p.setColor(sq01c);  sq01p.setStyle(Paint.Style.FILL);   canvas.drawRect(sq01, sq01p);
sq02.set(4*sqsize, line0, 5*sqsize, line0+sqsize);  sq02p.setColor(sq02c);  sq02p.setStyle(Paint.Style.FILL);   canvas.drawRect(sq02, sq02p);
...etc}

上記のコードの 3 つの部分は、それぞれ 64 回発生します。ループで単純化する方法はありますか? ありがとう

4

3 に答える 3

2

この方法を試してください:

private int[] myInt;
private Rect[] myRect;
private Paint[] myPaint;

public DrawGrid(Context context, int[] binary) {
    myInt = binary;
    myRect = new Rect[myInt.length];
    myPaint = new Paint[myInt.length];

    for (int i = 0; i < myInt.length; i++) {
        //Put Rect parameters here, you have to take advantage of the "i" variable 
        myRect[i] = new Rect();

        myPaint[i] = new Paint();
        myPaint[i].setColor(myInt[i]);
        myPaint[i].setStyle(Paint.Style.FILL);
    }
}

protected void onDraw(Canvas canvas) {
    for (int i = 0; i < myRect.length; i++) { // < not >
        canvas.drawRect(myRect[i], myPaint[i]);
    }
}
于 2013-03-29T16:26:27.870 に答える
0

たとえば、これを試してください:

Rect[] rects=new Rect[SIZE];

このリンクを参照してください

于 2013-03-29T16:11:54.413 に答える
0

Rects、Paints、および ints の配列を保持し (または、さらに良いことに、それらすべてを適切にカプセル化されたオブジェクトに入れて、それらの配列を保持します)、ループで初期化します。

于 2013-03-29T16:09:05.413 に答える