0

创建自定义视图并覆盖它的 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 自定义视图大小重复

4

2 回答 2

0

一种解决方案是从 Activity 获取维度并将它们传递给 View。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

metrics.widthPixels将为您提供所需的宽度

于 2012-09-19T20:11:19.733 回答
0

正如他所说,归功于@Luksprog 。有了这些信息,我可以弄清楚以下内容:

getLayoutParams().width/getLayoutParams().height - 可以包含以下任一值

  • LayoutParams.WRAP_CONTENT(其值为-2)
  • LayoutParams.MATCH_PARENT(其值为-1)或
  • 视图属性中指定的宽度(在 XML 中) layout_width

getMeasuredWidth()/getMeasuredHeight()(也是 onMeasure() 的 i/p 参数) - 将保持此视图的最大尺寸,可以在PIXELS中明显占用。

因此,回答我自己的问题:我们需要在 onMeasure() 中添加逻辑,使用这些方法来限制画布大小,以回答与这篇文章相关的问题,或者您自己的计算来调整画布大小!

于 2012-09-28T09:23:05.643 回答