【发布时间】:2012-09-12 04:30:25
【问题描述】:
创建自定义视图并覆盖它的 onDraw()。
- 不覆盖onMeasure()画布占据整个屏幕 设备。
- 覆盖 onMeasure(),画布被重新调整为尺寸 传递给 setMeasuredDimension()。
因此我们可以肯定地调整画布的大小,并且必须在 onMeasure() 中完成。
我想将自定义视图的画布重新调整为 LayoutParams(XML 或 Java)中指定的大小
现在需要方法/属性,它将返回 LayoutParams 中提到的大小参数以传递到 setMeasuredDimension() 中。
getWidth()/getHeight() - 仅在第一次通过 onMeasure() 后设置值
getLayoutParams().width/getLayoutParams().height - 不确定该值何时返回有效值(以编程方式设置参数会给出值“-1”)
getMeasuredWidth()/getMeasuredHeight() - 仅当已在 XML 中设置且以编程方式分配时才返回布局参数中指定的尺寸参数。
是否有任何其他保证方法将返回在 customview 的布局参数中设置的宽度和高度,或者 getMeasuredWidth()/getMeasuredHeight() 是传入 setMeasureDimensions() 的正确选择?
可能与Android Custom View Size 重复
【问题讨论】:
-
来自
LayoutParams的值被发送到onMeasure方法,您的工作是覆盖它以反映这些值。 -
@Luksprog: 有什么方法可以查出是否设置了“fill_parent”或“wrap_content”。
-
@Luksprog:来自 LayoutParams 的值只有在 XML 中设置时才会发送到 onMeasure 方法,而不是在以编程方式分配的情况下。 CustomView customView = new CustomView(getApplicationContext()); customView.setLayoutParams(new LayoutParams(100, 100)); onMeasure() 接收可用的屏幕宽度和高度。
标签: java android layout view android-canvas