Как нарисовать фоновое изображение и сделать его похожим на все устройства Android?

Прошу совета по следующей проблеме. Я разрабатываю небольшую игру, и у меня есть файл *.png для фона. Мне нужно поставить его на фон основного экрана игры. Более того, он должен быть в 2 раза больше по ширине и в 1,5 раза по высоте от размеров экрана, потому что мои объекты "перелетают" через эти границы. Кроме того, экран перемещается по этому фону в игровом процессе. Но я немного застрял в том, как это сделать.

Я хочу, чтобы мой фон выглядел одинаково на всех экранах с разными размерами и плотностью. Я пробовал некоторые решения, но они мне не нравятся, или я сделал что-то не так:

  1. Сделайте разные фоновые изображения и поместите их в специальные папки. Звучит хорошо, но с количеством разрешений Android-устройств на рынке это звучит не очень хорошо. Это просто увеличит размер *.apk. И если я буду использовать методы для установки фона, это растянет изображение - я думаю, это не очень хорошая идея.

  2. В методе onDraw() нарисуйте изображение на холсте. Я должен поместить его верхний левый угол в самый верхний левый угол возможной игровой области и нарисовать его. Но вот несколько вариантов:

    • cut from the main image the image i want and draw only this piece (what I use now)
    • изменить размер изображения, которое у меня есть, и рисовать с этими изменениями
    • что-то другое...

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


person Belurd    schedule 20.12.2011    source источник


Ответы (1)


вы должны использовать 9 исправлений изображения.

Графика NinePatchDrawable – это растягиваемое растровое изображение, размер которого Android автоматически изменит в соответствии с содержимым представления, в которое вы поместили его в качестве фона.

см. эту ссылку. http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

person Sujit    schedule 20.12.2011
comment
Хорошая идея! Благодарю вас! Но что, если внутри изображения нет похожих элементов? Если он имеет уникальный контент в каждой части? Для 9-патча я должен определить область, которая собственно и будет скопирована, как я понял. Вы использовали 9-пути в рисовании фона? - person Belurd; 20.12.2011
comment
да, я использовал 9-патч в большинстве своих приложений, а также для рисования фона. Вам нужно определить растягиваемую область, чтобы при отображении изображения на большом экране оно не влияло на другую область, а не на растягиваемую область. - person Sujit; 20.12.2011
comment
Я поговорю с дизайнером. Еще раз спасибо. - person Belurd; 20.12.2011