【问题标题】:Drawing widget onto Bitmap在位图上绘制小部件
【发布时间】:2010-03-03 21:16:41
【问题描述】:

在我的应用中,我需要在位图上绘制一个小部件内容。

代码(伪)如下:

AppWidgetHostView widget;
Bitmap bitmap;
...
widget = pickWidget();
...

bitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas(bitmap);
widget.draw(canvas);

我确定 pickWidget() 工作正常 - 如果 setContentView(widget);我让小部件在全屏上正确显示。 我正在绘制的位图也显示正常 - 例如,如果我使用 drawCircle 在画布上绘制或在位图上执行 setPixel(),我可以看到图纸。 所以问题在于widget.draw(),它似乎对位图没有任何影响。请分享您的想法。

【问题讨论】:

  • 如果您对 CaseyB 的回答感到满意,您应该通过单击左侧的勾号将其标记为“已接受”。这给了他“声誉积分”,并告诉其他人问题已经解决了。

标签: android android-widget


【解决方案1】:

更简单的方法是使用 View 的 DrawingCache。像这样:

widget.buildDrawingCache(true);
Bitmap bitmap = widget.getDrawingCache(true);
widget.destroyDrawingCache();

这将为您提供一个已在其中绘制视图的位图。传入的布尔值是是否缩放位图。您可能需要根据需要更改这些值。

【讨论】:

  • 感谢您的回复。但在我的情况下 getDrawingCache 返回 null 所以最终结果是相同的。我还能如何检查我是否拥有有效的小部件?
  • 你是先打电话给widget.buildDrawingCache(true)吗?根据文档,getDrawingCache() 应该返回 null 的唯一时间是未启用缓存时。
  • 是的,你的建议没问题。在我自己的答案中查看我的 cmets。谢谢!。
【解决方案2】:

我应该给自己多几分钟的时间 :) 问题解决了。 实际上这两种方法都有效 - 我只需要显式调用 widget.measure 后跟 widget.layout 来设置小部件的大小(我假设,当你执行 setContentView() 时会自动完成)。 我的应用程序对性能很敏感,因此最好有多种方法可供选择。 谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2018-05-27
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多