我有一个绘图应用程序,允许用户在空白画布上绘制。我试图绘制当前位图的缩放“缩略图”,以便当用户在视图中进行缩放时,他们可以引用缩略图来了解整个绘图画布的位置。我已经使缩放工作,并在正确的位置显示缩略图,但是似乎缩略图在添加新线条/形状后不会更新。
缩略图使用thumbCanvasPaint在thumbnailRectF定义的空间中显示,但在后续的onDraw()调用中,缩放的位图未从其原始状态更改,即使全尺寸活动画布显示所有的绘制等。根据一些测试,我觉得当我通过最初的draw(mCanvas)调用设置位图时,随后的onDraws会写入底层位图,而不是在onSizeChanged()中指定的位图。
所以,我想知道如何将onDraw画布与我可以轻松访问的位图相结合,以执行重新调整大小、保存等操作。看到this question,我认为draw(mCanvas)调用会将onDraw与mCanvas中指定的位图(在我的情况下是mBitmap)联系起来,但实际上,在更新画布方面似乎不起作用。
谢谢, 保罗
为了能够访问此视图的底层位图(显示缩略图,轻松将位图保存到文件等),我在View的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画布与我可以轻松访问的位图相结合,以执行重新调整大小、保存等操作。看到this question,我认为draw(mCanvas)调用会将onDraw与mCanvas中指定的位图(在我的情况下是mBitmap)联系起来,但实际上,在更新画布方面似乎不起作用。
谢谢, 保罗