我想填充畫布上矩形外部的區域。我用在矩形外部填充畫布
canvas.drawRect(pTopLeft.x, pTopLeft.y, pBotRight.x, pBotRight.y, paint);
來繪製矩形,但不能弄清楚如何填充矩形/剪輯外。
感謝 傑夫
我想填充畫布上矩形外部的區域。我用在矩形外部填充畫布
canvas.drawRect(pTopLeft.x, pTopLeft.y, pBotRight.x, pBotRight.y, paint);
來繪製矩形,但不能弄清楚如何填充矩形/剪輯外。
感謝 傑夫
你不會填補剪輯之外;那就是那種夾子可以防止的事情!如果你想填充矩形外繪圖層範圍內的空間,構建四個輔助rects:
Rect above = new Rect(0, 0, canvas.getWidth(), pTopLeft.y);
Rect left = new Rect(0, pTopLeft.y, pTopLeft.x, pBotRight.y);
Rect right = new Rect(pBotRight.x, pTopLeft.y, canvas.getWidth(), pBotRight.y);
Rect bottom = new Rect(0, pBotRight.y, canvas.getWidth(), canvas.getHeight());
然後填寫這些。
你不能在Canvas
之外畫;該區域屬於父母View
。你是否有能力繼承父母View
,並在你的課堂上進行繪畫?
如果你想在Canvas
夾以外的畫,那麼你就必須invalidate()
你感興趣的領域
感謝泰德和trojanfoe - 我想出了最巧妙的解決方法是
Point pTopLeft = new Point();
Point pBotRight = new Point();
//TODO:set x,y for points
Rect rHole = new Rect(pTopLeft.x, pTopLeft.y, pBotRight.x, pBotRight.y);
//assume current clip is full canvas
//put a hole in the current clip
canvas.clipRect(rHole, Region.Op.DIFFERENCE);
//fill with semi-transparent red
canvas.drawARGB(50, 255, 0, 0);
//restore full canvas clip for any subsequent operations
canvas.clipRect(new Rect(0, 0, canvas.getWidth(), canvas.getHeight())
, Region.Op.REPLACE);
ICS及以上...
canvas.clipRect(rHole, Region.Op.DIFFERENCE);
異,差異與ReverseDifference如果啓用了硬件加速,剪輯模式爲 將被ICS忽略。
在你看來只是禁用2D硬件加速:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);
感謝泰德。我玩弄了整個畫布,然後試圖讓剪輯區域透明 - 沒有什麼好處。你的方法取得了訣竅。 – Geoff 2011-02-17 20:03:42
我知道你現在正在工作,但另一種可能性發生在我身上:設置一個剪輯區域,排除中間和填充。我認爲如果你使用`canvas.clipRect(innerRect,Region.Op.DIFFERENCE)`,它會打你想要的洞。 – 2011-02-18 03:34:15