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