90 votes

Comment dessiner un triangle rempli dans le canevas Android ?

Je dessine donc ce triangle dans Android maps en utilisant le code ci-dessous dans ma méthode de dessin :

paint.setARGB(255, 153, 29, 29);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Path path = new Path();
path.moveTo(point1_returned.x, point1_returned.y);
path.lineTo(point2_returned.x, point2_returned.y);
path.moveTo(point2_returned.x, point2_returned.y);
path.lineTo(point3_returned.x, point3_returned.y);
path.moveTo(point3_returned.x, point3_returned.y);
path.lineTo(point1_returned.x, point1_returned.y);
path.close();

canvas.drawPath(path, paint);

Les pointsX_renvoyés sont les coordonnées que j'obtiens des champs. Il s'agit essentiellement de latitudes et de longitudes. Le résultat est un joli triangle mais l'intérieur est vide et je peux donc voir la carte. Existe-t-il un moyen de le remplir d'une manière ou d'une autre ?

0 votes

Comme je l'ai indiqué dans ma réponse, il suffit de ne pas utiliser moveTo() après chaque lineTo(), c'est tout.

0 votes

Je sais que c'est une vieille question qui a déjà une réponse (incorrecte) acceptée, et vous avez également posté votre solution finale qui fonctionne... mais vous ne dites pas pourquoi elle fonctionne, et j'espère que mon commentaire pourra épargner à quelqu'un le temps que je viens de passer là-dessus :)

4voto

Faakhir Points 346
private void drawArrows(Point[] point, Canvas canvas, Paint paint) {

    float [] points  = new float[8];             
    points[0] = point[0].x;      
    points[1] = point[0].y;      
    points[2] = point[1].x;      
    points[3] = point[1].y;         
    points[4] = point[2].x;      
    points[5] = point[2].y;              
    points[6] = point[0].x;      
    points[7] = point[0].y;

    canvas.drawVertices(VertexMode.TRIANGLES, 8, points, 0, null, 0, null, 0, null, 0, 0, paint);
    Path path = new Path();
    path.moveTo(point[0].x , point[0].y);
    path.lineTo(point[1].x,point[1].y);
    path.lineTo(point[2].x,point[2].y);
    canvas.drawPath(path,paint);

}

0 votes

Ça marche ! N'oubliez pas d'utiliser paint.setAntiAlias(true) afin d'obtenir un triangle lisse.

2 votes

A quoi sert l'appel drawVertices ?

3voto

kaftanati Points 331

Vous devez supprimer path.moveTo après la première initiale.

Path path = new Path();
path.moveTo(point1_returned.x, point1_returned.y);
path.lineTo(point2_returned.x, point2_returned.y);
path.lineTo(point3_returned.x, point3_returned.y);
path.lineTo(point1_returned.x, point1_returned.y);
path.close();

0 votes

Je n'ai pas 3 points mais seulement un point x et y. Comment puis-je dessiner un triangle à partir de ce point ?

2voto

oli.G Points 659

Ne fais pas ça. moveTo() après chaque lineTo()

En d'autres termes, supprimez chaque moveTo() sauf le premier.

Sérieusement, si je fais un copier-coller du code de l'OP et que j'enlève l'inutile moveTo() appels, ça marche.

Il n'y a rien d'autre à faire.


EDIT : Je sais que l'OP a déjà posté sa "solution finale", mais il n'a pas indiqué pourquoi cela fonctionne. La raison réelle a été assez surprenante pour moi, j'ai donc ressenti le besoin d'ajouter une réponse.

0 votes

Vous auriez dû ajouter un commentaire à ce sujet. Ce n'est pas une réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X