Подтвердить что ты не робот

Рисовать путь с отверстием (андроид)

У кого-нибудь есть подсказка для меня для следующей проблемы?

Я хотел бы нарисовать заполненный путь (холст), в котором есть отверстие. В 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);

Любые подсказки?

рассматривает

4b9b3361

Ответ 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-кода?