2016-07-30 93 views
0

我要裁剪图像的多个区域, 所以我必须延长ImageView画布中的多个裁剪区域?

自定义类这是我的onDraw:

@Override 
protected void onDraw(Canvas canvas) { 

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

    super.onDraw(canvas); 

} 

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

UPDATE:

我也尝试使用路径,而不是剪辑:

@Override 
protected void onDraw(Canvas canvas) { 

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

    super.onDraw(canvas); 

} 

但没有工作

回答

2

我找到了解决方案,其使用:

而不是
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); 

} 
0

将交叉,在rects取代。

尝试使用clipPath(...)代替。

即。

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

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

编辑:

作为每OP的最终解决方案,它也可以在将所述截取区域的时间合并的区域:

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

我试过了,但是它没有工作。 – Khaled

+0

然后你可能需要显示你的尝试,因为这是解决方案 – RabidMutant

+0

我建议显示你已经尝试了什么,包括clipPath和clipRegion – RabidMutant