Удалить одну фигуру из другой с помощью android.graphics.Path - PullRequest
5 голосов
/ 02 января 2012

я пытаюсь нарисовать следующее: Screenshot Но с плюсом вместо знака минуса в центре стрелки.

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

Мой код для вычитания минуса выглядит следующим образом

Path base = new Path();
[... draw the arrow ]

Path subtract = new Path();
subtract.moveTo(-xBarWidth/2, -xBarHeight/2); // center the path
subtract.rLineTo(xBarWidth, 0);
subtract.rLineTo(0, xBarHeight);
subtract.rLineTo(-xBarWidth, 0);
subtract.rLineTo(0, -xBarHeight);

base.add(subtract);

[in paint() function: canvas.draw(base, paint)]

Код для знака плюс:

int halfBarWidth = xBarWidth/2;
subtract.moveTo(-halfBarWidth, -xBarHeight/2);
subtract.rLineTo(halfBarWidth, 0);
subtract.rLineTo(0, halfBarWidth);
subtract.rLineTo(xBarHeight, 0);
subtract.rLineTo(0, -halfBarWidth);
subtract.rLineTo(halfBarWidth, 0);
subtract.rLineTo(0, -xBarHeight);
subtract.rLineTo(-halfBarWidth, 0);
subtract.rLineTo(0, -halfBarWidth);
subtract.rLineTo(-xBarHeight, 0);
subtract.rLineTo(0, halfBarWidth);
subtract.rLineTo(-halfBarWidth, 0);
subtract.rLineTo(0, xBarHeight);

Однако теперь он рисует белый плюс на вершине стрелки.Я попробовал subtract.setFillType(FillType.INVERSE_EVEN_ODD), но это ничего не изменило.

К сожалению, я не могу найти никакой помощи в API.

1 Ответ

6 голосов
/ 04 января 2012

может быть, это кому-нибудь поможет: мне пришлось установить fillType для базы в EVEN_ODD

base.setFillType(FillType.EVEN_ODD);
...