web-dev-qa-db-fra.com

Comment dessiner un chemin lisse / arrondi?

Je crée des chemins et j'ajoute plusieurs lignes dans chaque chemin en utilisant path.moveTo(x, y) et path.lineTo(x, y). Ensuite, canvas.drawPath(path, Paint) trace tous les chemins. Mais il y a un espace de 1 à 2 pixels entre les lignes dans certains chemins. Comment supprimer ces espaces? Mon code est quelque chose comme ça:

Paint = new Paint();
Paint.setColor(Color.RED);
Paint.setStyle(Paint.Style.FILL_AND_STROKE);
Paint.setDither(false);
Paint.setStrokeWidth(3);
Paint.setAntiAlias(true);

for (int i = 0; i < length; i++) {
     Path path = new Path();
     path.moveTo(a, b);
     path.lineTo(c, d);
     path.moveTo(c, d);
     path.lineTo(e, f);
     canvas.drawPath(path, Paint);
}
36
Onuray Sahin

Peut-être que cela créera ce que vous voulez

Paint.setColor(color);                    // set the color
Paint.setStrokeWidth(size);               // set the size
Paint.setDither(true);                    // set the dither to true
Paint.setStyle(Paint.Style.STROKE);       // set to STOKE
Paint.setStrokeJoin(Paint.Join.ROUND);    // set the join to round you want
Paint.setStrokeCap(Paint.Cap.ROUND);      // set the Paint cap to round too
Paint.setPathEffect(new CornerPathEffect(10) );   // set the path effect when they join.
Paint.setAntiAlias(true);                         // set anti alias so it smooths

:)

99
Terence Lui

Vous ne voulez probablement pas lineTo(c, d) puis immédiatement moveTo(c, d) ce qui est le même point. Si vous faites cela, vous n'obtiendrez pas de jointure de coin Nice sur les deux segments de ligne, ce qui peut ressembler à un espace laid.

Essayez de supprimer ce moveTo.

11
Graham Borland