如何从自定义视图的画布创建位图。
4 回答
虽然画布没有getBitmap()
函数,但由于您正在制作自定义视图,您可以做的是在视图类中编写这样的函数。
public Bitmap get(){
return this.getDrawingCache();
}
这将返回视图的位图,但重要的是在所有构造函数中添加它,
this.setDrawingCacheEnabled(true);
否则getDrawingCache
会返回null
没有办法Bitmap
从Canvas
. 您可以访问它的唯一方法是在创建这样的画布时自己传递它new Canvas(myBitmap)
并保留参考。
EDIT2:请参阅@Alex 评论打击 - 将 a 传递Bitmap
给 the的方法Canvas
似乎不适用于最新版本的 Android。
编辑:如果您不Canvas
自己创建,您可以创建一个屏幕大小Bitmap
(或您需要的任何大小),然后将其传递给Canvas
inonDraw
调用,如下所示canvas.setBitmap(myBitmap)
:
我发现 Canvas 有一个 setBitmap 函数,但没有一个 getBitmap 函数。这很奇怪,但无论如何,它使我能够自己创建位图并将其传递给画布,保留参考。
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) 之类的方法将在位图上绘制视图