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

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

Solutions Collecting From Web of "我可以在Android Canvas的范围之外绘制"

要在边界外绘制,需要展开canvas的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 

试着设定

 android:clipChildren="false" 

到父视图

您可以在任意位置绘制,但在剪切矩形之外不会保存任何内容。

@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); 

这解决了问题:-)

如果你想在TextView中绘制超出范围的文本,你应该这样做:

  

它不像@numan的答案那样使用clipRect(),因为TextView在onDraw()中剪辑它自己的rect:

 if (mShadowRadius != 0) { clipLeft += Math.min(0, mShadowDx - mShadowRadius); clipRight += Math.max(0, mShadowDx + mShadowRadius); clipTop += Math.min(0, mShadowDy - mShadowRadius); clipBottom += Math.max(0, mShadowDy + mShadowRadius); } canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom); 

最后但并非最不重要的,不要忘记在您的父ViewGroup中设置android:clipChildren="false"android:clipToPadding="false"