2016-07-30 125 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