2017-04-14 3 views
0

저는 하루 종일 무작위로 사각형을 그려 전체 화면을 채우는 데 보냈습니다. 내가 생각하는 일은 drawRect()가 호출 될 때 이전 그리기를 다시 그리는 것이고, 그것은 전혀 이해가되지 않는다. 이것은 코드이며,이 문제를 해결하기 위해 무엇을 해야할지 모르겠다. 여기에 그 결과가있다. http://i.imgur.com/a083U0a.png안드로이드 캔버스 drawRect()도 이전 그리기를 다시 그립니다.

public class MyView extends View { 
    public MyView(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     super.onDraw(canvas); 
     int numberPerRow = 10; 
     int x = getWidth()/numberPerRow; 
     int y = getHeight(); 



     for(int i = 0; i < 50; i++){ 
      for (int j = 0; i <= numberPerRow; j++){ 
       Paint paintTopRight = new Paint(); 
       int randColor = randomColor(); 
       paintTopRight.setColor(randColor); 
       canvas.drawRect(j*x,i*x,x,x,paintTopRight); 
      } 
     } 
    } 


    public int randomColor() { 

     int r = (int) (0xff * Math.random()); 
     int g = (int) (0xff * Math.random()); 
     int b = (int) (0xff * Math.random()); 

     return Color.rgb(r, g, b); 
    } 
} 
+0

에 새 onDraw(Canvas canvas) 방법; onDraw() 끝에서; 기능? –

+0

그래, 시도했지만 다른 색상으로 깜박이기 시작하지만 제대로 표시되지 않은 사각형 –

+1

그래,하지 마라. 그것은 당신의'View'를 무한 루프로 만듭니다. 먼저,'drawRect()'메소드의 매개 변수를 살펴 보자. 세 번째와 네 번째 매개 변수는'width'와'height'가 아니라'right'와'bottom'입니다. 둘째, 안쪽 'for' 루프를 검사하십시오. 종료 조건에서 외부 루프의 카운터를 사용하고 있습니다. 즉, i = numberPerRow이다. –

답변

0

귀하의 for 루프는 오타가있는 것 같습니다; `j를 사용할 때 i을 사용합니다.

변경 당신이) (무효로 사용해 볼 수 있습니다

@Override 
protected void onDraw(Canvas canvas) { 

    super.onDraw(canvas); 
    int numberPerRow = 10; 
    int x = getWidth()/numberPerRow; 
    int y = getHeight(); 



    for(int i = 0; i < 50; i++){ 
     for (int j = 0; j <= numberPerRow; j++){ 
      Paint paintTopRight = new Paint(); 
      int randColor = randomColor(); 
      paintTopRight.setColor(randColor); 
      canvas.drawRect(j*x,i*x,x,x,paintTopRight); 
     } 
    } 
} 
관련 문제