О изображении и размерах Android
Мне нужно уточнить некоторые сомнения об объектах изображения для моего приложения,
если я укажу в файле xml, что высота чего-то [вид изображения] равна 50 глубине падения
какой тип экрана я должен выбрать из папки ресурсов?
drawable, hdpi, ldpi, mdpi, xhdpi,
чтобы иметь изображение высотой 50 px,
и каков процент для больших изображений меньшего размера по сравнению с базовым изображением,
как в iOS, @2x, буквально в 2 раза больше размера изображения, и вы говорите программно нормальный размер,
спасибо!
Ответы
Ответ 1
mdpi
- эталонная плотность, то есть 1 px на дисплее mdpi
равна 1 dip. Соотношение для масштабирования активов:
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 пикселя (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
Ответ 2
Основываясь на ответе kcoppock, я создал следующую оболочку script, чтобы автоматически изменять размер всех изображений до нужного размера и копировать их в соответствующих папках с возможностью выгрузки Android *
Создайте оболочку script и вставьте следующий код:
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/*
Поместите свой script в папку и исходные изображения во вложенную папку, например:
/
.. createAndroidImages.sh
.. originalImages/
....a123.png
....b456.png
Запустите оболочку script в терминале: sh createAndroidImages.sh
Чтобы скопировать созданные изображения непосредственно в проект Android Studio:
cp -R drawable-* ~/AndroidStudioProjects/ESCRating/app/src/main/res/
Вы закончили! Надеюсь, это поможет кому-то!
P.S. Обратите внимание, что исходные изображения должны иметь по крайней мере четыре раза ширину в пикселях, чем требуемая ширина в dpi (например, 4 (коэффициент xxxhdpi) * 30dpi = > 120px) для достижения оптимальных результатов.
Ответ 3
kcoppock проделал отличную работу, объясняя плотность экрана Andorid.
Я просто хотел бы добавить еще один вопрос относительно первоначального вопроса.
Значок Android-планшета Android использует одно значение плотности.
По словам разработчика Google Nick Butcher Google+ post
Великолепный экран на Nexus 10 попадает в ведро плотности XHDPI. На планшетах Launcher использует значки из одного набора плотности вверх [0], чтобы сделать их немного большими. Чтобы ваш значок запуска (возможно, ваш самый важный ресурс приложения) был четким, вам нужно добавить значок 144 * 144px в папку drawable-xxhdpi или drawable-480dpi.
Найти источник здесь
Ответ 4
Вот мои расчеты для масштабирования и масштабирования изображений для Android -
ldpi (120 dpi, экран с низкой плотностью) - 36px x 36px (0,19) (1)
mdpi (160 dpi, экран средней плотности) - 48px x 48px (0,25) (1,33)
hdpi (240 dpi, экран высокой плотности) - 72px x 72px (0,38) (2)
xhdpi (320 dpi, Экстра высокой плотности) - 96px x 96px (0,5) (2,67)
xxhdpi (480 dpi, Экстра сверхвысокой плотности) - 144px x 144px (0,75) (4)
xxxhdpi (640 dpi, Экстра сверхвысокой сверхвысокой плотности) - 192px x 192px (1.0) (5.33)
Моя короткая статья помогает создавать ресурсы изображения, используя imagemagick, когда есть несколько изображений.