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

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

  • Android:如何获取部分重绘的自定义视图?
  • Android绘制一条线来跟随你的手指
  • 如何animation滚动位置? 如何顺利滚动?
  • 要在边界外绘制,需要展开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"