1

我正在尝试通过子类化“视图”来创建自己的视图。我想模拟一个新的 Button 类型类,它将使用 onDraw 绘制,我只需从传入的画布中绘制一个矩形。然后我将该自定义视图添加到布局 XML 文件中,但我无法控制它的大小。例如,我将宽度设置为“fill_parent”,将高度设置为“wrap_content”,但我不知道我的视图的内容是什么。(顺便说一句,我的视图所在的 LinearLayout 是面向“垂直”的)

谁能给我一些关于如何控制我的视图大小的指示?例如,我的自定义视图如何知道 XML 文件中设置了哪些参数?

4

1 回答 1

1

Android 无法检测到您的内容Canvas,因此它假定内容为 0x0。

要执行您要查找的操作,您必须覆盖onLayoutor onMeasure (onLayout由 Android 开发人员指定为一种布局子代的方式)。您还需要一种计算内容大小的方法。

首先,从一个名为 的成员变量开始Point mSize = new Point(0, 0);。在除 之外 onDraw但经常调用的方法中,您将希望将其替换为内容的大小。如果您绘制一个半径为 25 的圆,请执行以下操作mSize.x = 50; mSize.y = 50;

接下来,我将向您介绍这个答案(for onMeasure)。它显示了如何根据其父项的尺寸(在本例中除以 2)设置项目的大小。然后,您可以从中提取尺寸mSize.xmSize.y应用这些尺寸。

最后,invalidate()在你测量完新的之后调用mSize应该会迫使它View重新布局,并调整到你的新参数。这是我在这方面不确定的一部分。

注意:此外,setLayoutParams一旦计算出内容的大小,您就可以使用固定的宽度和高度进行调用Canvas。不过,不确定对此的性能影响。

于 2012-09-10T00:34:24.973 回答