canvas 中的多个剪辑区域?

Multiple clipping regions in canvas?

我想剪辑图像的多个区域, 所以我有一个自定义 class 扩展 ImageView

这是我的onDraw:

@Override
protected void onDraw(Canvas canvas) {

        canvas.clipRect(rect1);
        canvas.clipRect(rect2);

    super.onDraw(canvas);

}

当我剪辑 1 个矩形时它工作正常,但是当我有多个时它根本不显示任何东西。

更新:

我也尝试过使用 Path 进行裁剪:

@Override
protected void onDraw(Canvas canvas) {

    canvas.clipPath(path1);
    canvas.clipPath(path2);

    super.onDraw(canvas);

}

但是none有效

它将在您的矩形中交叉或替换。

尝试改用 clipPath(...)。

Path p1 = ...;
Path p2 = ...;
p2.addPath(p1);
canvas.clipRect(p2);

如果由于某种原因 clipPath 不起作用,则构建一个区域并使用 clipRegion。

编辑:

根据OP的最终解决方案,也可以在添加剪辑区域时合并区域:

canvas.clip{whatever}(rect/region/path, op).

我找到了解决方案,它使用的是:

canvas.clipPath(Path path, Op op);

而不是:

canvas.clipPath(Path path);

带有额外剪辑,这也适用于 RectRegion

我的代码是这样的:

Path path1 = new Path();

private void init(){

    path1.moveTo(100, 100);
    path1.lineTo(100, 500);
    path1.lineTo(500, 500);
    path1.lineTo(500, 100);
    path1.close();

}

@Override
protected void onDraw(Canvas canvas) {

    canvas.clipPath(path1);
    canvas.clipPath(path2, Region.Op.UNION);
    canvas.clipPath(path3, Region.Op.UNION);

    super.onDraw(canvas);

}