2017-04-14 4 views
0

J'ai passé ma journée entière à essayer de comprendre, comment dessiner des carrés avec des couleurs aléatoires, remplissant tout l'écran. Ce que je pense est que, quand drawRect() est appelé, il redessine les tirages précédents, ce qui n'a aucun sens, mais c'est tout ce que j'ai. C'est le code et je ne sais pas quoi faire d'autre, pour résoudre ce problème, voici le résultat. http://i.imgur.com/a083U0a.pngToile Android drawRect() redessine également les tirages précédents

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

Pouvez-vous essayer d'utiliser invalider(); à la fin de votre onDraw(); fonction? –

+0

Ouais j'ai essayé, mais il commence à clignoter avec des couleurs différentes, mais toujours pas correctement montré les cases –

+1

Ouais, ne fais pas ça. Il met juste votre 'View' dans une boucle de tirage sans fin. Tout d'abord, regardez les paramètres de la méthode 'drawRect()'. Les troisième et quatrième paramètres sont 'right' et' bottom', pas 'width' et' height'. Ensuite, vérifiez la boucle interne 'for'. Vous utilisez le compteur de la boucle externe dans la condition de terminaison; c'est-à-dire, 'i <= numberPerRow'. –

Répondre

0

Votre boucle for semble avoir une faute de frappe; vous utilisez i alors que vous devriez utiliser `j.

Modifier la nouvelle méthode onDraw(Canvas canvas) à

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