将小部件绘制到Bitmap上

时间:2010-03-03 21:16:42

标签: android android-widget

在我的应用程序中,我需要将一个小部件内容绘制到Bitmap上。

代码(伪)如下:

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在画布上绘图或在Bitmap上执行setPixel(),例如我可以看到图纸。 所以问题是widget.draw(),它似乎对位图没有任何影响。请分享您的想法。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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