如何通过视图填充来收缩画布?

3
我正在构建一个自定义视图,在其中重写了onDraw方法。
有没有一种方法可以通过此视图的填充值来压缩画布(在onDraw中作为参数接收)?
为了回答任何可能关于填充本身的问题 - 在我的情况下,我不能使用边距。我需要使用填充。
2个回答

5

每个视图都有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。


我知道这个,但我也不能使用这种方法...为了简化解释,我们可以说绘图本身是由第三方库执行的,而且我不能真正地与绘图边界交互。 我只能向此库提供我的画布,并等待魔法发生。因此,我的问题是关于如何缩小画布的问题... - Bartek Lipinski
没错,这就是我需要的,谢谢。我会编辑你的答案,以便值与clipRect正确配合使用。 - Bartek Lipinski

0

一种选择是创建一个具有内部尺寸(不包括填充)的位图,将其传递给库,然后将位图绘制到画布上。

另一种选择是使用contact()通过移动画布左侧和顶部的填充来转换画布。还要剪切画布,以便库不能在底部和右侧填充上绘制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接