Как определить, какого размера (в пикселях) должно быть изображение для 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
...