Android 查看选择背景图像并在其上绘制

Android 查看选择背景图像并在其上绘制,android,android-canvas,Android,Android Canvas,我创建了一个扩展视图的类。我在上面画画。它按预期工作。现在我想从图库中选择一个图像,并将其设置为在上面绘制。 一旦选中,我将图像设置为画布的位图 Bitmap bitmap= BitmapFactory.decodeStream(inputStream); mdb.mExtraBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); mdb是该自定义视图的对象 @Override protected void onSizeChanged(int

我创建了一个扩展
视图的类。我在上面画画。它按预期工作。现在我想从图库中选择一个图像,并将其设置为在上面绘制。
一旦选中,我将图像设置为画布的位图

Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
mdb.mExtraBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
mdb
是该自定义
视图的对象

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
   super.onSizeChanged(w, h, oldw, oldh);
   mExtraBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
   mExtraCanvas = new Canvas(mExtraBitmap);
   mExtraCanvas.drawColor(WHITE);
}
以下是
视图的
onSizeChanged
方法

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
   super.onSizeChanged(w, h, oldw, oldh);
   mExtraBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
   mExtraCanvas = new Canvas(mExtraBitmap);
   mExtraCanvas.drawColor(WHITE);
}
这是
onDraw
方法中的代码

super.onDraw(canvas);
canvas.drawBitmap(mExtraBitmap, 0, 0, null);
onTouchEvent
方法中,在
mExtraCanvas
上绘制路径。 问题是。 1.图像已设置,但无法在其上绘制。 2.缩放图像以覆盖。
谢谢

未测试。但应该是工作。

实际上发生了什么,在set
mdb.mExtraBitmap
之后,onSizeChanged调用。以及由
bitmap.createBitmap
创建的新位图

通过以下方式更改
onSizeChanged()
方法

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    mExtraBitmap = Bitmap.createScaledBitmap(mExtraBitmap,w, h,false);
    mExtraCanvas = new Canvas(mExtraBitmap); 
}
无需再次绘制位图,因为您正在从位图制作画布


对每个图形使用
mExtraCanvas
而不是其他
canvas

您只需在
mExtraCanvas
上绘制所选图像即可

mdb.mExtraCanvas.drawBitmap(image, 0, 0, null)
对于缩放部分,创建一个缩放位图,如

Bitmap.createScaledBitmap(image, 
mdb.mExtraBitmap.getWidth(), 
mdb.mExtraBitmap.getHeight(), false);

为什么要设置
mExtraCanvas.drawColor(白色)?因为最初我希望它是白色的。在画布上绘制位图后,如果绘制颜色,则无法显示位图。试试我的答案。是的,我正在mExtraCanvas上画图,然后只在视图的onDraw中绘制额外的位图。谢谢,但这对我没有帮助。因此,添加完整实现以获得更多说明。“无需再次绘制位图”如果不绘制额外的位图,您将看不到图形。让我提醒你,这是我正在绘制的额外位图。使用它来保存以前的图形。让我们。