2017-04-14 21 views
0

私は一日を使い、無作為の色で四角形を描画し、画面全体を塗りつぶす方法を試しました。私は何が起こると思います、drawRect()が呼び出されると、以前の描画を再描画します。それは意味を成しませんが、そのすべてが得られます。これはコードであり、私はこの問題を解決するために何をすべきか分からず、結果はここにあります。 http://i.imgur.com/a083U0a.pngAndroidのキャンバス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()'メソッドのパラメータを見てください。第3と第4のパラメータは '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); 
     } 
    } 
} 
関連する問題