У меня есть приложение для рисования, которое позволяет пользователю рисовать на пустом холсте. Я пытаюсь нарисовать масштабированный «эскиз» текущего растрового изображения, чтобы, когда пользователь масштабировал в представлении, он мог ссылаться на эскиз, чтобы получить представление о том, где они находятся на общем холсте рисования. У меня работает масштабирование, и я показываю эскиз в правильном месте, но похоже, что эскиз не обновляется при последующих 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) {
if (mScaled) {
Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int) thumbHeight, false);
canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint);
}
}
Миниатюра отображается в пространстве, определенном функцией thumbnailRectF с помощью thumbCanvasPaint, но в последующих вызовах onDraw () масштабированное растровое изображение не изменилось по сравнению с исходным состоянием, даже несмотря на то, что полноразмерный активный холст показывает все рисунки, и т. д. На основании некоторых тестов мне кажется, что пока я устанавливаю Bitmap с помощью начального вызова draw (mCanvas);, последующие onDraws записывают в базовый Bitmap, а не в тот, который указан в onSizeChanged ().
Итак, я думаю, я пытаюсь выяснить, как связать холст onDraw с растровым изображением, к которому я могу получить доступ для изменения размеров, сохранения и т. Д. Глядя на этот вопрос , я подумал, что рисование (mCanvas); вызов привяжет onDraw к растровому изображению, указанному в mCanvas (в моем случае, mBitmap), но на практике он, похоже, не работает, что касается обновлений холста.
Спасибо,
Пол