Хорошо, я смог решить эту проблему, но решение оказалось совершенно другим, чем я ожидал.
Во-первых, мне пришлось удалить логику, которая пыталась растянуть фактическое фоновое изображение, чтобы соответствоватьразмер окна, используя BitmapFactory.Options
.Поэтому я удалил следующее:
BitmapFactory.Options options = new BitmapFactory.Options();
Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
options.outHeight = size.x;
options.outWidth = size.y;
marioBackground = BitmapFactory.decodeResource(getResources(),
R.drawable.mario_bros_three,
options );
Во-вторых, мне пришлось определить масштабные коэффициенты для ширины и высоты, используя следующее (я поместил эту логику в свой метод рисования):
final float scaleFactorX = (float) getWidth() / marioBackground.getWidth();
final float scaleFactorY = (float) getHeight() / marioBackground.getHeight();
Затем в моем методе рисования мне пришлось масштабировать фактический холст, используя метод масштабирования холста и недавно определенные масштабные коэффициенты:
canvas.scale(scaleFactorX, scaleFactorY);
Я сделал это до фактического рисования растрового изображения на холсте:
canvas.drawBitmap(marioBackground, 0, 0, null);
Итак, мой метод рисования содержит следующую логику для правильного масштабирования моего фонового изображения:
final float scaleFactorX = (float) getWidth() / marioBackground.getWidth();
final float scaleFactorY = (float) getHeight() / marioBackground.getHeight();
canvas.scale(scaleFactorX, scaleFactorY);
canvas.drawBitmap(marioBackground, 0, 0, null);