Canvas.setBitmap(Bitmap)中的UnsupportedException

Gen*_*eti 8 android bitmap android-canvas

我正在创建一个应用程序,在用户控制下进行绘图等操作,然后让它们保存.我试图实现这一点的方法是使用画布绘制的自定义位图,然后保存生成的位图.

一切都按预期工作,直到调用Canvas.setBitmap(Bitmap).

我收到以下错误.

03-24 13:47:50.741: E/AndroidRuntime(27888): FATAL EXCEPTION: main
03-24 13:47:50.741: E/AndroidRuntime(27888): Process: example.imageeditor, PID: 27888
03-24 13:47:50.741: E/AndroidRuntime(27888): java.lang.UnsupportedOperationException
03-24 13:47:50.741: E/AndroidRuntime(27888):    at android.view.HardwareCanvas.setBitmap(HardwareCanvas.java:39)
Run Code Online (Sandbox Code Playgroud)

抛出异常的代码:

protected void onDraw(Canvas canvas) {
    mResultImage=Bitmap.createBitmap(width,height,mOriginalImage.getConfig());
    canvas.setBitmap(mResultImage);
    canvas.save();

    if(mOriginalImage!=null)
        canvas.drawBitmap(mOriginalImage, width, height, paint);
    else
        canvas.drawText("Image loading...", width/2f-20, height/2, paint);

    canvas.drawText(text, x, y-20, paint);

    canvas.restore();
    super.onDraw(canvas);
}
Run Code Online (Sandbox Code Playgroud)

android.view.HardwareCanvas甚至没有在android的引用上.但我能够找到一些有关它的信息.似乎它的setBitmap(Bitmap)尚未编写,这没关系.

我的问题是为什么onDraw(Canvas)返回一个HardwareCanvas类?它甚至不是Canvas的超级类.

奖金问题:有什么方法吗?

Pas*_*llo 5

如果要在Bitmap上绘制,则应创建一个新的Canvas,将位图传递给它.不应该允许您更改应该绘制视图的画布的目标.因此,只需使用位图创建一个新画布,然后在onDraw方法中在画布上绘制结果位图.