2017-04-14 6 views
0

Ich habe den ganzen Tag damit verbracht, herauszufinden, wie man Quadrate mit zufälligen Farben zeichnet und den ganzen Bildschirm ausfüllt. Was ich denke ist, dass, wenn drawRect() aufgerufen wird, vorherige Draws neu gezeichnet werden, was keinen Sinn ergibt, aber alles, was ich habe. Das ist der Code und ich weiß nicht, was ich sonst tun soll, um dieses Problem zu beheben, hier ist das Ergebnis. http://i.imgur.com/a083U0a.pngAndroid Canvas DrawRect() zeichnet auch frühere Zeichnungen zurück

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

Können Sie versuchen ungültig machen mit(); am Ende deines onDraw(); Funktion? –

+0

Ja, ich habe es versucht, aber es beginnt zu blinken mit verschiedenen Farben, aber immer noch nicht richtig gezeigt Quadrate –

+1

Ja, tu das nicht. Es bringt Ihre Ansicht einfach in eine endlose Schleife. Sehen Sie sich zunächst die Parameter für die Methode 'drawRect()' an. Der dritte und der vierte Parameter sind "rechts" und "unten", nicht "Breite" und "Höhe". Zweitens, überprüfe die innere for-Schleife. Sie verwenden den Zähler der äußeren Schleife in der Beendigungsbedingung; h. "i <= numberPerRow". –

Antwort

0

Ihre for Schleife erscheint einen Tippfehler zu haben; Sie verwenden i, wenn Sie `j verwenden sollten.

Ändern Sie die neue onDraw(Canvas canvas) Methode

@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); 
     } 
    } 
} 
Verwandte Themen