26

如何从自定义视图的画布创建位图。

4

4 回答 4

37

虽然画布没有getBitmap()函数,但由于您正在制作自定义视图,您可以做的是在视图类中编写这样的函数。

public Bitmap get(){
   return this.getDrawingCache();
}

这将返回视图的位图,但重要的是在所有构造函数中添加它,

this.setDrawingCacheEnabled(true);

否则getDrawingCache会返回null

于 2013-06-03T13:11:52.120 回答
15

没有办法BitmapCanvas. 您可以访问它的唯一方法是在创建这样的画布时自己传递它new Canvas(myBitmap)并保留参考。

EDIT2:请参阅@Alex 评论打击 - 将 a 传递Bitmap给 the的方法Canvas似乎不适用于最新版本的 Android。

编辑:如果您不Canvas自己创建,您可以创建一个屏幕大小Bitmap(或您需要的任何大小),然后将其传递给CanvasinonDraw调用,如下所示canvas.setBitmap(myBitmap)

于 2012-06-01T09:31:31.500 回答
1

我发现 Canvas 有一个 setBitmap 函数,但没有一个 getBitmap 函数。这很奇怪,但无论如何,它使我能够自己创建位图并将其传递给画布,保留参考。

于 2012-06-01T10:02:59.277 回答
0

getDrawingCache() 在 API 28 中已弃用。

所以现在您可以在自定义视图中使用以下代码

Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
draw(canvas);
// return bitmap; -- this is the bitmap you need

如果您想在自定义视图之外使用此代码,请使用 viewInstance.getHeight()... viewInstance.draw(canvas) 之类的方法将在位图上绘制视图

于 2020-01-10T10:40:08.497 回答