О размерах изображений и ресурсов Android


86

Мне нужно прояснить некоторые сомнения в отношении изображений для моего приложения,

если я укажу в файле xml, что высота чего-либо [вид изображения] составляет 50 высот

какой тип экрана выбрать из папки ресурсов?

drawable, hdpi, ldpi, mdpi, xhdpi,

чтобы получить изображение высотой 50 пикселей,

и каков процент изображений большего и меньшего размера по сравнению с базовым изображением,

как и в iOS, @ 2x буквально в 2 раза превышает размер изображения, и вы программно говорите нормальный размер,

Благодарность!


1
Ваш вопрос объяснен в руководстве для Android: developer.android.com/guide/practices/screens_support.html
Марцин Орловски,

Ответы:


373

mdpiэто эталонная плотность, то есть 1 пиксель на mdpiдисплее равен 1 провалу. Коэффициент масштабирования активов:

ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1    | 1.33  | 1.5  | 2     | 3      | 4

Хотя вам действительно не о чем беспокоиться, tvdpiесли вы не разрабатываете специально для Google TV или оригинального Nexus 7, но даже Google рекомендует просто использовать hdpiактивы.

Это означает, что если вы делаете изображение 48dip и планируете поддерживать до xxhdpi resolution, вам следует начать с изображения 144 пикселей (192 пикселей, если вам нужны исходные ресурсы для xxxhdpi) и сделать следующие изображения для плотностей:

ldpi    | mdpi    | tvdpi    | hdpi    | xhdpi     | xxhdpi    | xxxhdpi
36 x 36 | 48 x 48 | 64 x 64  | 72 x 72 | 96 x 96   | 144 x 144 | 192 x 192

И они должны отображаться примерно одинакового размера на любом устройстве, если вы поместили их в папки с определенной плотностью (например drawable-xhdpi, drawable-hdpiи т. Д.).

Для справки, плотности пикселей для них следующие:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640

32
Это самое простое объяснение этой темы, которое я когда-либо видел в Интернете. Я буквально
заказал

10
Ха-ха, отлично! : P Только что добавил инфу и для XXHDPI.
Кевин Коппок

Как вы решили, что нужно начинать с 48 дип? Скажем, у вас под рукой только планшет (mdpi), вы начинаете со случайного размера и повторяете, пока он не станет «достаточно большим»?
phtrivier 06

@phtrivier Это просто размер, который я использовал в качестве примера. В данном случае это размер значка пусковой установки. Какой бы размер вам ни понадобился для других ресурсов, зависит от вашего варианта использования.
Кевин Коппок

1
Я также сделал инструмент для вычисления этого на лету: pixit-tool.web.app/#
wdavies973

22

На основе ответа kcoppock я создал следующий сценарий оболочки, чтобы автоматически изменять размер всех изображений до правильного размера и копировать их в соответствующие папки Android drawable- * -!

Создайте сценарий оболочки и вставьте следующий код:

createAndroidImages.sh

#!/bin/bash

read -p "Please enter the subfolder of the original images? " folder
read -p "How many DP (width) should the image have? " dp

for i in $(find $folder/. -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

mkdir drawable-ldpi
mkdir drawable-mdpi
mkdir drawable-tvdpi
mkdir drawable-hdpi
mkdir drawable-xhdpi
mkdir drawable-xxhdpi
mkdir drawable-xxxhdpi

cp $folder/* drawable-ldpi/
cp $folder/* drawable-mdpi/
cp $folder/* drawable-tvdpi/
cp $folder/* drawable-hdpi/
cp $folder/* drawable-xhdpi/
cp $folder/* drawable-xxhdpi/
cp $folder/* drawable-xxxhdpi/

sips -Z $(echo $dp*3/4 | bc) drawable-ldpi/*
sips -Z $(echo $dp | bc) drawable-mdpi/*
sips -Z $(echo $dp*4/3 | bc) drawable-tvdpi/*
sips -Z $(echo $dp*3/2 | bc) drawable-hdpi/*
sips -Z $(echo $dp*2 | bc) drawable-xhdpi/*
sips -Z $(echo $dp*3 | bc) drawable-xxhdpi/*
sips -Z $(echo $dp*4 | bc) drawable-xxxhdpi/*

Поместите свой сценарий в папку, а исходные изображения - во вложенную папку, например:

/
.. createAndroidImages.sh
.. originalImages/
....a123.png
....b456.png

Запустите сценарий оболочки в терминале: sh createAndroidImages.sh

Чтобы скопировать созданные изображения прямо в проект Android Studio:

cp -R drawable-* ~/AndroidStudioProjects/ESCRating/app/src/main/res/

Готово! Надеюсь, это кому-то поможет!

PS Обратите внимание, что исходные изображения должны иметь как минимум в четыре раза большую ширину в пикселях, чем желаемая ширина в dpi (например, 4 (коэффициент xxxhdpi) * 30dpi => 120 пикселей) для оптимальных результатов.


4

kcoppock проделал большую работу, объяснив плотность экрана Andorid. Я просто хотел бы добавить еще один момент по поводу исходного вопроса.

Значок средства запуска планшета Android использует одну емкость вверх.

Согласно сообщению в Google+ разработчика Google Ника Батчера

Великолепный экран Nexus 10 попадает в ведро плотности XHDPI. На планшетах Launcher использует значки от одного уровня плотности [0], чтобы сделать их немного больше. Чтобы ваш значок запуска (возможно, самый важный актив вашего приложения) был четким, вам нужно добавить значок 144 * 144 пикселей в папку drawable-xxhdpi или drawable-480dpi.

Найдите источник здесь


1

Вот мои расчеты по масштабированию и уменьшению изображений для Android-

ldpi (120 dpi, экран с низкой плотностью) - 36 пикселей x 36 пикселей (0,19) (1)

mdpi (160 dpi, экран средней плотности) - 48 пикселей x 48 пикселей (0,25) (1,33)

hdpi (240 dpi, экран высокой плотности) - 72px x 72px (0,38) (2)

xhdpi (320 dpi, экран сверхвысокой плотности) - 96 пикселей x 96 пикселей (0,5) (2,67)

xxhdpi (480 dpi, экран сверхвысокой плотности) - 144 пикселя x 144 пикселя (0,75) (4)

xxxhdpi (640 dpi, экран с экстра-сверх-сверхвысокой плотностью) - 192 x 192 пикселя (1,0) (5,33)

Моя небольшая статья полезна для создания ресурсов изображений с помощью imagemagick, когда изображений несколько.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.