How can I get the bitmap of the canvas I get in onDraw?

后端 未结 4 1360
庸人自扰
庸人自扰 2020-12-20 10:51

How can I create the bitmap from the canvas of custom view.

相关标签:
4条回答
  • 2020-12-20 11:34

    While there is no getBitmap() function for a canvas, since you are making a custom view, what you can do instead is write a function like this inside your view class.

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

    This returns the Bitmap of the view, but it is important that in all your constructors you add this,

    this.setDrawingCacheEnabled(true);
    

    Otherwise getDrawingCache will return null

    0 讨论(0)
  • 2020-12-20 11:38

    I found out that Canvas has a setBitmap function, but not a getBitmap one. It's strange, but anyway, it enables me to create the bitmap myself and pass it to the canvas, retaining the reference.

    0 讨论(0)
  • 2020-12-20 11:40

    There is no way to extract the Bitmap out of a Canvas. The only way you can access it is to pass it yourself when creating the canvas like this new Canvas(myBitmap) and keep the reference.

    EDIT2: see @Alex comment blow - the approach of passing a Bitmap to the Canvas does not seem to work for more recent versions of Android.

    EDIT : If you don't create the Canvas yourself, you could create a screen-sized Bitmap (or whatever size you need) and then pass it to the Canvas in onDraw calls like this: canvas.setBitmap(myBitmap).

    0 讨论(0)
  • 2020-12-20 11:46

    getDrawingCache() is deprecated in API 28.

    So now you may use following code inside your custom view

    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
    

    If you want to use this code outside your cusom view use methods like viewInstance.getHeight()... viewInstance.draw(canvas) will draw the view on the bitmap

    0 讨论(0)
提交回复
热议问题