【问题标题】:How to make sure that android view did full layout?如何确保android视图做了完整的布局?
【发布时间】:2014-10-10 08:27:52
【问题描述】:

我正在调用 inputView.draw(drawCanvas) 以便将我的视图保存到位图。

  Bitmap resultBitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
  Canvas drawCanvas = new Canvas(resultBitmap);
  inputView.draw(drawCanvas);

位图不包含完整的视图图像(我的视图在画布上自定义绘图 - 带有图例的饼图)。保存的位图只是图例的一部分。

阅读View.draw(android.graphics.Canvas)的javadoc

在调用此函数之前,视图必须已经完成了完整的布局。

如何确保视图进行了完整布局? 调用 inputView.draw(drawCanvas) 时,我的视图在屏幕上呈现并可见。

【问题讨论】:

  • 不要将标题编辑为“已回答”,而是接受您自己的回答。我想您需要等待 24 小时才能自行接受。
  • 会接受我的回答,但必须等待 两天 天。

标签: android android-layout android-canvas android-view


【解决方案1】:

我认为您可以检查布局参数。

LayoutParams layoutParams = layout.getLayoutParams();

然后检查是否已满(我不明白您所说的“满”是什么意思)。

【讨论】:

  • 我也不确定“视图必须已经完成完整布局”是什么意思。这是来自 View.draw(Canvas) 的 javadoc 的引用。我提供了链接。我检查了建议的代码,返回 layoutParams 对象不为空,并且已填充。布局是在我尝试保存位图之前明确完成的 - 对象在屏幕上可见(我从上下文菜单中调用保存)。另外,在保存之前,我调用 view.getWidth()/getHeight 来获取我的位图的大小,并且效果很好。
【解决方案2】:

通过添加以下代码解决

 int measuredWidth = View.MeasureSpec.makeMeasureSpec(viewWidth, View.MeasureSpec.EXACTLY);
 int measuredHeight = View.MeasureSpec.makeMeasureSpec(viewHeight, View.MeasureSpec.EXACTLY);
 inputView.measure(measuredWidth, measuredHeight);
 inputView.layout(0, 0, inputView.getMeasuredWidth(), inputView.getMeasuredHeight());

在绘制到我的位图之前。

奇怪的是,在我拥有的三个屏幕中的两个屏幕上一切正常。保存的位图总是完整的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多