Как определить, какого размера (в пикселях) должно быть изображение для Android, чтобы оно правильно отображалось на разных устройствах?

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

Первое изображение должно быть полноэкранным (в качестве фона для приложения). Я несколько раз читал статью "Поддержка нескольких экранов" на developers.android.com, но все еще не уверен, какой размер должен иметь изображение для каждой категории точек на дюйм. Я пытался выбрать правильные размеры, но при просмотре приложения на больших экранах (например, 1280x800@mdpi) обнаружил, что фон выглядит пиксельным. Это понятно, так как мой образ для mpdi - 320x480px. Как я могу это исправить? Какой размер изображения я должен использовать?

Второе изображение - кнопка. В настоящее время у меня изображение в очень высоком разрешении, но приложение уменьшает его, чтобы оно выглядело хорошо. Тем не менее, я не хочу, чтобы так было, когда приложение будет выпущено. Для этого изображения мне нужно знать, каким должен быть размер в пикселях. В настоящее время это 60dp x 50dp в приложении. Что бы это преобразовать в пикселях? Я знаю, чтобы использовать формулу px = dp * (dpi / 160) но что dpi будет в этом случае? Я не могу использовать NinePatch PNG для этого изображения.

Я не понимаю, какой размер (в пикселях) нужно начинать с моих изображений, чтобы они правильно отображались на устройствах Android. Dp = px, если вы используете устройство mdpi?

ОБНОВИТЬ:

После нескольких часов стука головы я придумал следующее:

drawable-xlarge-xhdpi   2560x1920px
drawable-large-xhdpi    1920x1440px
drawable-normal-xhdpi   1280x960px

drawable-xlarge-hdpi    1920x1440px
drawable-large-hdpi     1440x1080px
drawable-normal-hdpi    960x720px

drawable-xlarge-mdpi    1280x960px
drawable-large-mdpi     960x720px
drawable-normal-mdpi    640x480px

drawable-xlarge-ldpi    960x720px
drawable-large-ldpi     720x540px
drawable-normal-ldpi    480x360px

Это будут мои каталоги для рисования и максимальное разрешение, которое я ожидаю для каждого из них (я решил не поддерживать маленькие экраны). Поэтому мои изображения будут такими размерами.

Отлично смотрится на моем телефоне. Я не вижу артефактов. Он также работает на эмуляторе для экрана с разрешением 1280x800@mpdi, так что, надеюсь, он будет работать на всех устройствах...

Кто-нибудь видит проблемы с этим? Есть лучший способ сделать это? Мои расчеты выглядят правильно?

2 ответа

Вот, я получил это здесь, я просто передаю его

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
Generalised Dpi values for screens:

ldpi Resources for low-density (ldpi) screens (~120dpi)
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra high-density (xhdpi) screens (~320dpi).
Therefore generalised size of your resources (assuming they are full screen):

ldpi
Vertical = 426 * 120 / 160 = 319.5px
Horizontal = 320 * 120 / 160 = 240px
mdpi
Vertical = 470 * 160 / 160 = 470px
Horizontal = 320 * 160 / 160 = 320px
hdpi
Vertical = 640 * 240 / 160 = 960px
Horizontal = 480 * 240 / 160 = 720px
xhdpi
Vertical = 960 * 320 / 160 = 1920px
Horizontal = 720 * 320 / 160 = 1440px

px = dp*dpi/160

Используйте метод в ответе JRowan, и вы можете добавить нужные изображения для "специальных" экранов в папки res, как здесь:

res/drawable-xlarge-mdpi/background.png

или же

res/drawable-sw600dp-mdpi/background.png
...
Другие вопросы по тегам