用孔绘制路径(android)

时间:2013-01-07 14:22:23

标签: android canvas svg

有没有人对我有以下问题的提示?

我想绘制一个填充路径(画布),其中有一个洞。 在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);

任何提示?

问候

2 个答案:

答案 0 :(得分:33)

您应该使用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);

答案 1 :(得分:0)

SVG使用fill-rule确定路径内/外的内容。 Java还允许设置缠绕规则。使用Android路径时,还有fillType,其工作方式类似。也许您为java或SVG代码设置了不同的规则?