Изображение Android не масштабируется и не отражает настройки параметров - PullRequest
0 голосов
/ 14 ноября 2018

Я новичок в Android, и я не смог найти работоспособное решение в SO

У меня есть фон для игры, я изменил размеры изображений, относительно правильной плотности,и они есть в моих каталогах плотности рисования ресурсов, но мое изображение все еще искажено в эмуляторах.

Я также попытался установить параметры BitmapFactory, но ответа до сих пор нет:

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 );

Затем рисуем растровое изображение с помощью:

canvas.drawBitmap(marioBackground, 0, 0, null);

Пока я все еще вижуэто в моем эмуляторе mdpi:

Emulator Results

Может ли кто-нибудь указать мне правильное направление, чтобы мое изображение соответствовало моим установленным параметрам или автоматическим масштабам.

1 Ответ

0 голосов
/ 28 ноября 2018

Хорошо, я смог решить эту проблему, но решение оказалось совершенно другим, чем я ожидал.

Во-первых, мне пришлось удалить логику, которая пыталась растянуть фактическое фоновое изображение, чтобы соответствоватьразмер окна, используя 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...