从onDraw()绘制到创建的位图

use*_*309 1 android bitmap ondraw

我正在尝试绘制到Bitmap,这样我就可以将自定义视图放在imageView中.onDraw方法中的代码是:

    public void onDraw(Canvas canvas) {     

    Bitmap drawGraph = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);       
    canvas.setBitmap(drawGraph);    
    canvas.drawBitmap(drawGraph, 0, 0, bgPaint);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我尝试以这种方式使用位图,我只是得到一个黑屏.我知道如果我不尝试绘制位图,我的代码的其余部分就会显示.

如果我注释掉这条线

canvas.setBitmap(drawGraph);
Run Code Online (Sandbox Code Playgroud)

然后一切都很完美,所以这是问题,但我不知道为什么.

我哪里错了?

use*_*309 6

原来我必须创建第二个画布.我的工作代码仅适用于可能需要它的人:

    public void onDraw(Canvas canvas) {

    Canvas singleUseCanvas = new Canvas();      

    drawGraph = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.ARGB_8888);      
    singleUseCanvas.setBitmap(drawGraph);   

    canvas.drawBitmap(drawGraph, 100, 100, bgPaint);
Run Code Online (Sandbox Code Playgroud)

  • onDraw 可以在任何地方调用 1 到 15 次。将“Bitmap.createBitmap”放入“onDraw”内部将导致 OutOfMemory 错误。 (2认同)