Как нарисовать 800 на 480 изображений на Android

1

У меня есть изображение размером 800 на 300, которое я знаю - это ширина разрешения моей тестовой платформы (HTC Desire на 800x480). Когда я пытаюсь нарисовать это изображение на экране, он странно чешет. Он разливается по левой стороне экрана и заполняет почти всю вертикаль.

Я использую такой код:

canvas.drawBitmap(экран [1], новый Rect (0,0,800,300), новый Rect (0,0,800,300), null);

По какой-то причине

width_x = canvas.getWidth();

width_y = canvas.getHeight();

сообщает мое разрешение как 533 на 320. Теперь я предполагаю, что это для исключительной удаленной увлекательной системы масштабирования, используемой андроидом, поэтому приложения отображаются на всех телефонах одинакового размера, но я хочу игнорировать это. Я пишу игру, поэтому хочу обрабатывать масштабирование и позиционирование самостоятельно - например, используя дополнительное свойство экрана, если оно станет доступным. Лучшая практика для Android может быть подходящей для приложения на основе значков, но я бы хотел обратить внимание на абсолютные позиции пикселей и получить информацию об абсолютном разрешении экрана.

Поэтому мой вопрос в том, что это абсолютно невозможно? Если это полностью противопоказано, потому что у андроида есть простая и эффективная система, чтобы сделать это, мне было бы интересно узнать, что это такое. dpi не имеет отношения к моему дизайну игры (так же, как если бы это была компьютерная игра, это было бы неуместно)

Возможно, мой экран на самом деле 533 на 320, если я не определю какое-то разрешение? Я попытался использовать значения масштабирования по ширине и высоте, и изображение было правильным размером на экране, грубо, но имело зубчатые края, потому что произошло какое-то масштабирование. Поэтому у меня не было доступа ко всем пикселям, которые способен отображать мой экран.

Чтобы масштабировать его, я использовал что-то вроде

canvas.drawBitmap(экран [1], новый Rect (0,0,800,300), новый Rect ((int) (0.0f), (int) (0.0f), (int) (533.0f), (int) (187,5f)), null);//номера, только что удаленные для тестирования, - отношение, эквивалентное зарегистрированному разрешению экрана. Выглядит ужасно

Любая помощь будет очень оценена.

Приветствия,

Робин.

Теги:
screen-resolution

2 ответа

0

спасибо за ваш ответ. Я исправил одну из своих проблем - в файле манифеста была настроена некорректная настройка ОС, которая была настроена некорректно - переключение на 4 (т.е. 1,6), по-видимому, фиксировало значения, которые я получал для высоты и ширины, по крайней мере для HTC. Эмулятор более проблематичен, но, по крайней мере, это важный шаг в правильном направлении. Для вашей информации я работаю в полноэкранном режиме, в ландшафтном режиме (фиксированный), с переопределенными функциями для почти всего. (включая onDraw, surfaceChanged и т.д.)

Если я могу получить абсолютную ширину и высоту, я могу написать свой собственный код для загрузки правильных активов и с помощью правильного масштабирования для позиционирования экрана - dpi не является проблемой, поэтому, надеюсь, это не зайдет слишком далеко от предлагаемых рекомендаций,

Спасибо также за намек на рисование в растровое изображение для скорости - это очень удобная информация. Вы случайно знаете команду для этого? Я не заметил canvas.drawBitmap с перегрузкой для отправки данных в другое растровое изображение.

Большое спасибо за вашу любезную помощь и, конечно же, счастливое Рождество! (или религиозный/светский праздник вашего личного выбора)

Приветствия,

Робин.

0

Android не делает ничего, чтобы возиться с вашим воспринимаемым разрешением - вы работаете с 800x480 пикселями на этом Желании.

Вы работаете в полноэкранном, настраиваемом представлении и переопределении onDraw? Вы работаете с SurfaceView? Нам нужно знать эти вещи, прежде чем мы сможем помочь вам в решении вашей проблемы.

Предполагая, что вы делаете это, вы должны иметь возможность рисовать растровое изображение на экране без какого-либо масштабирования с помощью Canvas.drawBitmap(растровое изображение растрового изображения, поплавок влево, float top, Paint paint). В вашем случае это выглядело бы как canvas.drawBitmap( screen[1], 0.0f, 0.0f, null);, чтобы поместить его в верхний левый угол вашего холста.

В приложениях с высокой чувствительностью к производительности (например, в играх) вы не хотите использовать исходную/целевую Rect-версию drawBitmap() во время цикла рисования, поскольку она будет выполнять масштабирование во время каждой итерации цикла. Вместо этого нарисуйте масштабированную/обрезанную версию вашего исходного растрового изображения в другое растровое изображение участника и нарисуйте ее в цикле, используя смещенную выше версию drawBitmap x/y.

Если вы хотите узнать количество экранной недвижимости, с которой вы работаете (и вам обязательно нужно, если вы делаете какой-либо пользовательский чертеж), вам нужно переопределить либо onSizeChanged() или surfaceChanged(), в зависимости от реализации.

Вы действительно должны проверить демонстрации API, есть несколько отличных примеров того, как делать именно то, что вы пытаетесь сделать там.

Удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню