Рисовать путь с отверстием (андроид)
У кого-нибудь есть подсказка для меня для следующей проблемы?
Я хотел бы нарисовать заполненный путь (холст), в котором есть отверстие.
В SVG определение пути:
M 100 100 L 200 100 L 200 200 L 100 200 L 100 100 z
M 125 125 L 175 125 L 175 175 L 125 175 L 125 125 z
Я хотел бы нарисовать этот путь (форму) без пути вычитания пути (из-за специфического дизайна программного обеспечения)
Моя попытка с помощью java рисует мне полный квадрат без отверстия. Мне интересно, почему SVG-зритель рисует дыру с помощью наработанного определения, а полотно java нет? где разница? Как я могу достичь этого?
Path p=new Path();
p.moveTo(100, 100);
p.lineTo(200,100);
p.lineTo(200,200);
p.lineTo(100,200);
p.close();
p.moveTo(150, 150);
p.moveTo(180, 150);
p.moveTo(180, 180);
p.moveTo(150, 180);
p.close();
canvas.drawPath(p, paint);
Любые подсказки?
рассматривает
Ответы
Ответ 1
Вы должны использовать Path.setFillType(Path.FillType.EVEN_ODD)
:
final Path path = new Path();
final Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
path.moveTo(100, 100);
path.lineTo(200, 100);
path.lineTo(200, 200);
path.lineTo(100, 200);
path.close();
path.moveTo(150, 150);
path.lineTo(180, 150);
path.lineTo(180, 180);
path.lineTo(150, 180);
path.close();
path.setFillType(Path.FillType.EVEN_ODD);
canvas.drawPath(path, paint);
Ответ 2
SVG определяет, что внутри/вне пути, используя правило заполнения. Java также позволяет установить правило обмотки. С помощью Android-маршрутов также существует fillType, который работает аналогичным образом. Возможно, у вас есть разные правила для java или SVG-кода?