Android: как совместить пути двух фигур и убрать перекрытия? - PullRequest
5 голосов
/ 30 сентября 2010

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

Я пытаюсь сделать это, чтобы создать объект Path, который объединяет треугольник с другой формой (круглый прямоугольник).

Я делаю это следующим образом:

Path path = new Path();
// Create triangular segment

Point drawOffset = getAttributes().getDrawOffset();
int leaderGap = getAttributes().getLeaderGapWidth();

// Recall that we have a coordinate system where (0,0) is the
// bottom midpoint of the annotation rectangle.

// the point to left of gap
int x1 = -leaderGap/2;
int y1 = 0;

// the point to right of gap
int x2 = leaderGap/2;
int y2 = 0;

// The point where we're drawing to; the end of the pointy segment of triangle
int x3 = -drawOffset.x;
int y3 = drawOffset.y;

path.moveTo(x2, y2);
path.lineTo(x3, y3);
path.lineTo(x1, y1);
// path.close();


// Add the rectangular portion to the path
path.addRoundRect(backgroundShape, 5, 5, Path.Direction.CW);

Проблема в том, что roundRect - это замкнутый путь, поэтому его ребро просвечивает под треугольным сечением.

Картинка стоит тысячи слов, вот и все:

Rounded balloon

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

Если бы все, что я делал, был прямой прямоугольник, я мог бы сам создать весь путь с нуля. Но я хотел бы сделать закругленные углы, и было бы немного краски сделать это с помощью Path (да, я знаю, что вы можете сделать quad to и arcTo, но это все же не такое чистое решение, как я подобное).

Так в общем, возможно ли объединить два пути и создать единый объект объединения, который отслеживает периметр обоих?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2016

Да, это возможно с API 19. Вы можете выполнять логические операции между двумя путями.Как и в вашем случае, вы можете создать UNION из двух путей, используя Path.op().Полный список операций, которые можно выполнить, см. здесь .

0 голосов
/ 03 августа 2011

Я не вижу удобного способа комбинировать пути таким образом. Обычно я добиваюсь этого, вручную рисуя скругленные прямоугольные части с помощью Path.arcTo () и Path.lineTo (), это немного дополнительных усилий, но это приведет к желаемому результату.

Еще один вариант, который, возможно, будет более гибким, если вы решите сменить тему, - это использовать drawpatch на девять патчей , есть даже редактор, позволяющий вам создать их под названием Draw 9-patch

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