2017-06-09 15 views
0

我使用xamarin開發一個android應用程序。當我嘗試使用Region類時出現問題,下面的代碼可以很好地工作,並顯示預期的藍色區域。不明白Region類非常好

Rect rect1 = new Rect(0, 0, 10,10); 
canvas.ClipRect(rect1); 
Rect rect2 = new Rect(20, 20, 30,30); 
canvas.ClipRect(rect2, Region.Op.Union); 
canvas.DrawRect(0, 0, 40, 40, paint); 

但下面的代碼無法正常工作,只是什麼都不顯示,一個空白的背景

Region region = new Region(); 
Rect rect1 = new Rect(0, 0, 10,10); 
region.Union(rect1); 
Rect rect2 = new Rect(20, 20, 30,30); 
region.Union(rect2); 

canvas.ClipRegion(region); 
canvas.DrawRect(0, 0, 40, 40, paint); 

我不知道爲什麼。

回答

0

事實上,它可以工作,但它可能會被你的ActionBar或其他東西阻止,所以你不能看到它,你認爲它不起作用,如this。但是如果你修改座標,你可以看到你畫的矩形。這是我的代碼和結果:

Region region = new Region(); 
Rect rect1 = new Rect(200, 200, 300, 300); 
region.Union(rect1); 
Rect rect2 = new Rect(400, 400, 500, 500); 
region.Union(rect2); 

這裏是document解釋canvas.ClipRegion(region)方法:

相交具有指定區域的當前剪輯。請注意,與使用當前矩陣轉換其參數的clipRect()和clipPath()不同,clipRegion()假定其參數已位於當前圖層位圖的座標系中,因此不執行轉換。

編輯:

座標爲clipRect(),coornadite爲clipRegion()

+0

謝謝。我改變了我的座標,並可以顯示形狀。但我不同意你的解釋。如果ActionBar或其他東西覆蓋了我的形狀,並導致在第二種情況下無法看到它,那麼爲什麼可以在第一種情況下看到這些形狀? – Frank

+0

請注意,與clipRect()和clipPath()不同,它們通過當前矩陣轉換它們的參數,它表示clipRect()方法,其座標是當前矩陣,它將放置的空間。但對於ClipRegion()方法,其座標是當前圖層的位圖,即手機屏幕。他們的座標是不同的。 –

+0

我已更新我的答案,請檢查它。 :) –