我有一个绘图应用程序,允许用户在空白画布上绘图。我正在尝试绘制当前位图的缩放“缩略图”,以便当用户在视图中缩放时,他们可以参考缩略图以了解它们在整个绘图画布中的位置。我有缩放工作,并且在正确的位置显示缩略图,但是当添加新的线条/形状时,缩略图似乎没有在后续的 onDraws 上更新。
这样我就可以访问该视图的底层位图(以显示缩略图,能够轻松地将位图保存到文件等),我在 onSizeChanged() 中为视图执行以下操作:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// set the canvas height, panning, etc, based on the now inflated View
mWidth = getWidth();
mHeight = getHeight();
mAspectRatio = mWidth / mHeight;
mPanX = 0;
mPanY = 0;
// create the Bitmap, set it to the canvas
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
draw(mCanvas);
}
然后,当用户绘制并调用 invalidate() 时,我在 onDraw() 中执行以下操作以生成缩略图:
@Override
protected void onDraw(Canvas canvas) {
<snipped code that draws paths, shapes to canvas>
if (mScaled) {
Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int) thumbHeight, false);
canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint);
}
}
缩略图使用 thumbCanvasPaint 显示在 thumbnailRectF 定义的空间中,但在随后的 onDraw() 调用中,缩放的位图并没有改变其原始状态,即使全尺寸的活动画布显示了所有的绘图等。在某些测试中,在我看来,当我使用对 draw(mCanvas); 的初始调用设置位图时,随后的 onDraws 正在写入底层位图,而不是在 onSizeChanged() 中指定的位图。
所以,我想我想弄清楚如何将 onDraw 画布绑定到一个位图,我可以随时访问以执行重新调整大小、保存等。看着这个问题,我认为 draw(mCanvas); 调用会将 onDraw 绑定到 mCanvas 中指定的位图(在我的例子中是 mBitmap),但实际上,就画布的更新而言,它似乎不起作用。
谢谢,
保罗