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

时间:2014-11-04 13:11:10

标签: java android canvas ondraw

我正在构建一个自定义视图,我在其中覆盖onDraw方法。

是否有办法通过此视图填充值来收缩画布(在onDraw中作为参数接收)?

并回答有关填充本身的任何可能的问题 - 在我的情况下,我不能使用边距。我需要使用填充。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

一个选项是创建一个内部大小的位图(没有填充),将其传递给库,并将位图绘制到画布上

另一种选择是使用带有矩阵的contact()来转换画布,该矩阵通过左边和上边的填充移动画布。还剪辑画布,以便库无法在底部和右侧填充的顶部绘制