视图选择背景图像并在其上绘制

时间:2018-12-17 07:49:56

标签: android android-canvas

我创建了一个扩展View的类。我正在画图。它按预期工作。现在,我想从“图库”中选择一个图像并将其设置为在其上方绘制。 选中图片后,我会将其设置为画布的位图。

Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
mdb.mExtraBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

mdb是该自定义View的对象。

这是onSizeChanged的{​​{1}}方法。

View

这是@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上绘制路径。 问题是。 1.图像已设置但无法在其上绘制。 2.缩放图像以使其覆盖。 谢谢!

2 个答案:

答案 0 :(得分:1)

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

mdb.mExtraCanvas.drawBitmap(image, 0, 0, null)

然后为缩放的部分创建一个缩放的位图。

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

答案 1 :(得分:0)

未测试。但应该可以。

实际上会发生什么,在设置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); 
}

由于您是从Bitmap制作画布,因此无需再次绘制位图。

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