如何获取我在onDraw中获得的画布的位图?

时间:2012-06-01 09:27:57

标签: android android-canvas

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

4 个答案:

答案 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)之类的方法在位图上绘制视图