2013-03-29 3 views
1

Я знаю, что вы не можете использовать цикл for для создания нескольких переменных с именами с числовым рисунком, но есть ли способ упростить следующие строки кода с помощью какого-либо типа цикл? В противном случае это очень длинный файл, который очень мало, и мне это не нравится! Вот сокращенная версия моего кода.Использовать цикл for для ускорения определения переменных Java Android

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} 

Каждая из трех частей кода выше имеет место 64 раза каждый. Есть ли способ упростить его с помощью цикла? Спасибо

+1

не могли бы вы использовать массивы? – Joni

+0

Я читал, что в аналогичном вопросе здесь, но не был уверен, как реализовать его в моей ситуации. – David

+0

Я думаю, что массивы или списки могут вам помочь, если да, я могу привести пример – MoHaKa

ответ

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]); 
    } 
} 
+0

Это выглядит великолепно. Я попробую сейчас. Большое спасибо – David

+0

Это сработало отлично, хотя у вас было> вместо <в цикле for, и мне потребовались годы, чтобы понять! – David

0

Храните массив Rects, Paints и ints (или, еще лучше, разместите их в хорошем инкапсулированном объекте и сохраните массив из них) и инициализируйте их в цикле.

0

Например, попробуйте следующее:

Rect[] rects=new Rect[SIZE]; 

и увидеть это link