【问题标题】:Using Android, restricting canvas size to View's size which is specified using layoutparams使用 Android,将画布大小限制为使用 layoutparams 指定的 View 大小
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    感谢@Luksprog 他said。有了这些信息,我可以弄清楚以下几点:

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

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

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

    因此回答我自己的问题:我们需要在 onMeasure() 中添加逻辑使用这些方法来限制画布大小,如在链接到这篇文章的问题上回答的那样,或者你自己的计算来调整画布的大小!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 2015-10-06
      • 2011-10-19
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多