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

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

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

Любой намек?

С уважением

Solutions Collecting From Web of "Рисовать путь с отверстием (android)"

Вы должны использовать 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); 

SVG определяет, что внутри / вне пути, используя правило заполнения . Java также позволяет установить правило обмотки. В Android-путях также есть fillType, который работает аналогичным образом. Возможно, у вас есть разные правила для java или SVG-кода?