Как рисовать равноудаленные черты, используя DashPathEffect - PullRequest
0 голосов
/ 12 октября 2018

В настоящее время я использую DashPathEffect с жестко заданными интервалами для рисования круга следующим образом:

float[] intervals = new float[]{ 3, 18 };
DashPathEffect path = new DashPathEffect(intervals, 0); 
paint.setPathEffect(path);
… … … …
canvas.drawCircle(x, y, radius, paint);

Но это создает неэквидистантную черту, где круг начинается и заканчивается, как показано на рисунке.ниже:

enter image description here

Конечно, я могу настроить его вручную, но это будет работать только для одного конкретного устройства плотности, и снова возникнет та же проблема вразная плотность отображения.Какой будет формула для расчета равноотстоящих штрихов?

1 Ответ

0 голосов
/ 12 октября 2018

Вам нужно n тире плюс n пробелов, чтобы иметь ту же общую длину, что и окружность круга.В приведенном ниже коде предполагается, что вы правильно определили точку center и radius, которые хотите использовать.

double circumference = 2 * Math.PI * radius;
float dashPlusGapSize = (float) (circumference / NUM_DASHES);
intervals[0] = dashPlusGapSize * DASH_PORTION;
intervals[1] = dashPlusGapSize * GAP_PORTION;

DashPathEffect effect = new DashPathEffect(intervals, 0);
paint.setPathEffect(effect);

canvas.drawCircle(center, center, radius, paint);

Например, я использовал NUM_DASHES = 20, DASH_PORTION = 0.75f иGAP_PORTION = 0.25f, и я вижу:

enter image description here

Вы можете использовать разные значения для этих констант, чтобы изменить количество штрихов, в которое вы нарезаете цикл, или какбольшие тире / разрыв относительно друг друга (до тех пор, пока DASH_PORTION + GAP_PORTION складывается до 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...