12

有人对以下问题有提示吗?

我想绘制一条填充路径(画布),其中有一个洞。在 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 查看器会使用 Mentoined 定义绘制洞而 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);

有什么提示吗?

问候

4

2 回答 2

36

你应该使用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);
于 2013-01-07T14:42:03.587 回答
0

SVG 使用fill-rule确定路径内部/外部的内容。Java 还允许设置缠绕规则。对于 Android 路径,还有一个类似的fillType。也许您为 java 或 SVG 代码设置了不同的规则?

于 2013-01-07T14:45:31.910 回答