我想在画布上填充矩形外的区域。我使用
canvas.drawRect(pTopLeft.x, pTopLeft.y, pBotRight.x, pBotRight.y, paint);
想要绘制矩形,但是不知道如何填充矩形外/裁剪。
谢谢 Geoff
感谢ted和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);
您不会在剪辑区域外填充;这就是剪辑的作用,防止这种情况发生!如果您想要填充矩形外部空间且在绘制层边界内部,请构建四个辅助矩形:
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.clipRect(innerRect, Region.Op.DIFFERENCE)
,它将打出你想要的孔洞。 - Ted HoppICS and above ...
canvas.clipRect(rHole, Region.Op.DIFFERENCE);
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
。你不能在Canvas
的外面绘制;那个区域属于父级View
。你能否对父级View
进行子类化,然后在该类中进行绘图?
如果你想在Canvas
剪辑区域之外进行绘制,则必须invalidate()
你感兴趣的区域。