使用android.graphics.Path从另一个形状中删除一个形状

use*_*255 5 android drawing 2d

我想要绘制的是以下内容: 截图 但是在箭头的中心加上一个加号而不是一个减号.

我想从白色底座形状中减去"减号".奇怪的是,对于减号可以正常工作,但是如果我绘制一个加号而不是它不再减去它,而是将它添加到底层路径.

减去减号的我的代码看起来像这样

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)]
Run Code Online (Sandbox Code Playgroud)

加号的代码:

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);
Run Code Online (Sandbox Code Playgroud)

但是,现在它在箭头顶部绘制了白色加号.我试过subtract.setFillType(FillType.INVERSE_EVEN_ODD)但它没有改变任何东西.

不幸的是我在api找不到任何帮助.

use*_*255 6

也许这会对某人有所帮助:我必须将base的fillType设置为EVEN_ODD

base.setFillType(FillType.EVEN_ODD);
Run Code Online (Sandbox Code Playgroud)