Об изображении Android и размерах активов
Мне нужно прояснить некоторые сомнения по поводу активов изображения для моего приложения,
если я укажу в XML-файле, что высота чего-то [представление изображения] равна 50 высотам
какой тип экрана мне выбрать из папки ресурсов?
drawable, hdpi, ldpi, mdpi, xhdpi,
иметь изображение высотой 50 пикселей,
и каков процент для более крупных изображений меньшего размера по сравнению с базовым изображением,
как в iOS, @2x буквально в 2 раза больше размера изображения, и вы говорите программно нормальный размер,
Спасибо!
4 ответа
mdpi
является эталонной плотностью, то есть 1 px на 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
активы.
Это означает, что если вы делаете изображение с разрешением 48 точек на дюйм и планируете поддерживать до xxhdpi resolution
, вы должны начать с изображения 144px (192px, если вы хотите собственные ресурсы для 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
Основываясь на ответе 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 => 120px) для получения оптимальных результатов.
kcoppock проделал большую работу, объясняя плотность экрана Андорида. Я просто хотел бы добавить еще один момент относительно первоначального вопроса.
Значок запуска планшета Android использует одну область плотности вверх.
По словам разработчика Google Ника Ника Батчера
Великолепный экран на Nexus 10 попадает в корзину плотности XHDPI. На планшетах Launcher использует значки от одного контейнера плотности до [0], чтобы сделать их немного больше. Чтобы убедиться, что ваш значок запуска (возможно, самый важный ресурс ваших приложений) четкий, вам нужно добавить значок 144*144 пикселей в папку drawable-xxhdpi или drawable-480dpi.
Найти источник здесь
Вот мои расчеты для увеличения и уменьшения изображений для Android-
ldpi (120 точек на дюйм, экран низкой плотности) - 36 пикселей на 36 пикселей (0,19) (1)
MDP (160 точек на дюйм, экран средней плотности) - 48 х 48 пикселей (0,25) (1,33)
HDP (240 точек на дюйм, экран высокой плотности) - 72 х 72 пикселей (0,38) (2)
xhdpi (320 точек на дюйм, экран сверхвысокой плотности) - 96 x 96 пикселей (0,5) (2,67)
xxhdpi (480 точек на дюйм, экран сверхвысокой плотности) - 144 x 144 px (0,75) (4)
xxxhdpi (640 точек на дюйм, экран сверхвысокой, сверхвысокой плотности) - 192 x 192 пикселей (1,0) (5,33)
Моя короткая статья полезна для создания ресурсов изображений с помощью imagemagick, когда есть несколько изображений.