我正在构建一个自定义视图,在其中重写了onDraw方法。
有没有一种方法可以通过此视图的填充值来压缩画布(在onDraw中作为参数接收)?
为了回答任何可能关于填充本身的问题 - 在我的情况下,我不能使用边距。我需要使用填充。
有没有一种方法可以通过此视图的填充值来压缩画布(在onDraw中作为参数接收)?
为了回答任何可能关于填充本身的问题 - 在我的情况下,我不能使用边距。我需要使用填充。
每个视图都有getPaddingTop/Bottom/Left/Right()方法,它们将为您提供每个填充的值。
当您使用画布进行绘制时,您需要确保始终在这些限制范围内进行绘制:
minX = getPaddingLeft()
maxX = getWidth() - getPaddingLeft() - getPaddingRight()
minY = getPaddingTop()
maxY = getHeight() - getPaddingTop() - getPaddingBottom()
编辑:
如果您想限制画布上可以绘制的区域,请尝试在Canvas上使用以下调用:
canvas.clipRect(minX, minY, maxX, maxY, Region.Op.REPLACE);
超出这些限制的任何内容都将被忽略。
请记住,在画布上执行变换(如平移)之前,这将运作良好。一旦开始执行这些操作,事情就会变得有点奇怪,您可能需要在运行时更改clipRect。
一种选择是创建一个具有内部尺寸(不包括填充)的位图,将其传递给库,然后将位图绘制到画布上。
另一种选择是使用contact()通过移动画布左侧和顶部的填充来转换画布。还要剪切画布,以便库不能在底部和右侧填充上绘制。