2013-03-05 7 views
0

내 화면을 직사각형으로 나눕니다. 그러나 for 루프를 사용하고 있으므로 매번 다시 작성하는 직사각형을 저장하지 않습니다. 배열과 같이 어떻게 저장합니까? 그런 다음 루프 내부for 루프에서 rects를 저장하는 방법

 public void drawGrid() { 
    //android.os.Debug.waitForDebugger(); 
    int height,width; 
    int column,row; 
    int maxColumn,maxRow; 
    maxColumn = 4; 
    maxRow = 4; 
    column = 0; 
    row = 0; 
    height = c.getHeight()/maxRow; 
    width = c.getWidth()/maxColumn; 
    Paint pg = new Paint(); 
    Rect[] test[]; 


    for(int i = 0;i < 5; i++) { 
     int srcX = column * width; 
     int srcY = row * height; 
     Rect src =new Rect(srcX,srcY,srcX + width, srcY +height); 
     pg.setColor(Color.WHITE); 
     pg.setStyle(Paint.Style.STROKE); 
     pg.setStrokeWidth(5); 
     c.drawRect(src, pg); 
     if (column == maxColumn && row == maxRow){ 
      i = 5; 
     } else {i=0;} 
     if (column == maxColumn){ 
      row = row + 1; 
      column = 0; 
     } else {column = column + 1;} 

    } 



} 

답변

2

는, 사전에이를 할당합니다. 따라서 필요한 직사각형 수를 결정할 때마다 (즉, 항상 동일한 경우 생성자에서 초기화해야 함). 이런 식으로 뭔가 :

Rect[] rects = new Rect[rectCount]; 
for(int i = 0; i < rectCount; i++) rects[i] = new Rect(); 

그런 다음 도면 루프에서, 사용 :

rects[i].set(srcX, srcY, srcX + width, srcY + height); 

당신은 가능하면 그리기 작업하는 동안 객체를 할당하지 않도록해야합니다.

편집 : 2 차원 배열의 경우 :

rects[row][col].set(srcX, srcY, srcX + width, srcY + height); 
+0

아마 그렇게하는 것이 더 나을 것이라고 생각했습니다. rects [maxColumn] [maxRow]와 같은 배열로 설정하려고합니다. 그리드에서 좌표계로 그들을 다시 호출 할 수 있습니다. 그래서 만들어지면 그냥 Rect [Column] [row]로 만듭니다. 그렇게 할 수 있을까요? – user1967326

+0

그래, 할 수있어. 에서 편집했습니다. – kcoppock

+1

정말 고마워요. – user1967326

1
Rect rectArray[] = new Rect[5]; 

: 당신은 그리기 작업하는 동안 객체를 인스턴스화하지 않을 수 있도록

rectArray[i] = new Rect(srcX,srcY,srcX + width, srcY +height); 
+0

감사합니다 : 당신은 이런 것들을 쉽게 유용한 물건의 하중을 할 수

ArrayList<Rect> rects = new ArrayList<Rect>(); rects.add(new Rect(srcX,srcY,srcX + width, srcY +height)); 

, 여기에 몇 가지 예입니다. 나는 그것을 선언하는 방법에 대해 혼란스러워했다. – user1967326

1

가 항상 사각형의 고정 번호를 가지고 건가요 : 루프에서 다음

Rect[][] rects = new Rect[rowCount][colCount]; 
for(int i = 0; i < rowCount; i++) { 
    for(int j = 0; j < colCount; j++) { 
     rects[i][j] = new Rect(); 
    } 
} 

,이 같은 일이야? 배열 목록을 고려하고 싶습니까? 이 일 http://javarevisited.blogspot.com.es/2011/05/example-of-arraylist-in-java-tutorial.html

+0

maxRow와 maxColumn에 의해 결정될 것입니다. rectArray [maxRow] [maxColumn]와 같은 배열에 넣을 수있을 것 같았습니다. 그런 다음 좌표로 다시 호출하십시오. – user1967326