Как нарисовать гладкий / округлый путь? - PullRequest
32 голосов
/ 30 сентября 2011

Я создаю пути и добавляю несколько строк в каждый путь, используя path.moveTo(x, y) и path.lineTo(x, y). Затем canvas.drawPath(path, paint) рисует все пути. Но между линиями в некоторых путях есть 1-2 пикселя. Как я могу удалить эти пробелы? Мой код примерно такой:

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

Ответы [ 2 ]

90 голосов
/ 30 сентября 2011

Может быть, это создаст то, что вы хотите

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

:)

11 голосов
/ 30 сентября 2011

Вы, вероятно, не хотите lineTo(c, d), а затем сразу moveTo(c, d), что является той же точкой. Если вы сделаете это, вы не получите хорошего углового соединения на двух отрезках, что может выглядеть как ужасный разрыв.

Попробуйте удалить это moveTo.

...