查看 Select 一张背景图片并在其上绘图
View Select a background image and draw on it
我创建了一个扩展 View
的 class。我正在借鉴它。它按预期工作。现在我想要 select 画廊中的图像并将其设置为在其上方绘制。
我将图像设置为 canvas 的位图,一旦它被 selected.
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
mdb.mExtraBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
mdb
是那个自定义 View
的对象。
这里是View
的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. 缩放图像以覆盖。
谢谢!
未测试。但应该可以工作。
实际上发生了什么,在设置 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);
}
并且无需再次绘制位图,因为您是从位图制作 canvas。
对每个绘图使用 mExtraCanvas
而不是其他 canvas
。
您只需在 mExtraCanvas
上绘制所选图像即可
mdb.mExtraCanvas.drawBitmap(image, 0, 0, null)
并为缩放部分创建一个缩放位图,例如。
Bitmap.createScaledBitmap(image,
mdb.mExtraBitmap.getWidth(),
mdb.mExtraBitmap.getHeight(), false);
我创建了一个扩展 View
的 class。我正在借鉴它。它按预期工作。现在我想要 select 画廊中的图像并将其设置为在其上方绘制。
我将图像设置为 canvas 的位图,一旦它被 selected.
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
mdb.mExtraBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
mdb
是那个自定义 View
的对象。
这里是View
的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. 缩放图像以覆盖。
谢谢!
未测试。但应该可以工作。
实际上发生了什么,在设置 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);
}
并且无需再次绘制位图,因为您是从位图制作 canvas。
对每个绘图使用 mExtraCanvas
而不是其他 canvas
。
您只需在 mExtraCanvas
mdb.mExtraCanvas.drawBitmap(image, 0, 0, null)
并为缩放部分创建一个缩放位图,例如。
Bitmap.createScaledBitmap(image,
mdb.mExtraBitmap.getWidth(),
mdb.mExtraBitmap.getHeight(), false);