我创建了一个扩展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.缩放图像以使其覆盖。
谢谢!
答案 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
。