我可以在Android Canvas的范围之外绘制

Mar*_*ark 24 android drawing image-clipping

我正在移植一个在图形环境中编写的应用程序,允许绘图发生在剪切矩形的边界之外.在Android中有什么办法吗?

num*_*ati 45

要在边界外绘制,您需要展开画布的clipRect.

查看Canvas类上的重载clipRect方法.

注 - 您需要指定Region操作,因为默认操作是INTERSECT.所以像这样:

Rect newRect = canvas.getClipBounds();
newRect.inset(-5, -5)  //make the rect larger

canvas.clipRect (newRect, Region.Op.REPLACE);
//happily draw outside the bound now
Run Code Online (Sandbox Code Playgroud)

  • Region.Op.REPLACE 在 API >= 26 时被弃用 你有其他解决方案吗?我用完了所有的 SOF 还没有找到 (4认同)
  • 它根本不起作用。我只是使用(-2000,-2000)参数调整画布大小,然后翻译它,但我绘制的图像仍然被剪裁。 (2认同)

Dan*_*Vus 35

试着设定

android:clipChildren="false" 
Run Code Online (Sandbox Code Playgroud)

到父视图

  • 我不知道这个问题,但我想感谢您解决我所面临的问题。谢谢。这就是我想要的。 (2认同)

Cas*_*eyB 9

您可以在您喜欢的地方绘制,但在剪切矩形之外不会保存任何内容.


ces*_*rds 5

@numan 给出的答案几乎没问题,问题是这种方法的内存分配,所以我们应该这样做:

// in constructor/elsewhere
Rect newRect = new Rect();

// in onDraw
canvas.getClipBounds(newRect);
newRect.inset(0, -20);  //make the rect larger
canvas.clipRect(newRect, Region.Op.REPLACE);
Run Code Online (Sandbox Code Playgroud)

这解决了问题:-)

  • 好吧,我想这里的要点是 newRect 在每个对象初始化时分配一次,而不是每次调用 onDraw 时分配它。 (2认同)
  • `Region.Op.REPLACE` 已弃用。它不再起作用了! (2认同)