У меня есть приложение для рисования, которое позволяет пользователю рисовать на пустой холст.Я пытаюсь нарисовать масштабированное «миниатюру» текущего растрового изображения, чтобы, когда пользователь масштабировал в представлении, они могли ссылаться на миниатюру, чтобы понять, где они находятся в общем холсте рисования.У меня работает масштабирование, и я отображаю миниатюру в правильном месте, но кажется, что миниатюра не обновляется при последующих 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);
}
Затем, когда пользовательВызывается drawable и 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);
}
}
Миниатюра отображается в пространстве, определенном thumbnailRectF, используя thumbCanvasPaint, но в последующем onDraw ()вызовы, масштабированное растровое изображение не изменилось по сравнению с его исходным состоянием, хотя полноразмерный активный холст показывает все чертежи и т. д. На основании некоторого тестирования мне кажется, что пока я устанавливаю растровое изображение с первоначальным вызовомdraw (mCanvas); последующие onDraws записывают в базовое растровое изображение, а не в однуcified in onSizeChanged ().
Итак, я думаю, что я пытаюсь выяснить, как я связываю холст onDraw с битовой картой, к которой я могу получить доступ для выполнения изменений размеров, сохранения и т. д. Глядя на этот вопрос , мне показалось, что розыгрыш (mCanvas);вызов связал бы onDraw с растровым изображением, указанным в mCanvas (в моем случае, mBitmap), но на практике это, похоже, не работает в том, что касается обновлений холста.
Спасибо,
Пол