Про розміри зображень та активів Android


86

Мені потрібно пояснити деякі сумніви щодо об’єктів зображення для мого додатка,

якщо я вказав у файлі xml, що висота чогось [подання зображення] дорівнює 50 висоті занурення

який тип екрану вибрати в папці ресурсів?

drawable, hdpi, ldpi, mdpi, xhdpi,

мати зображення висотою 50 пікселів,

і який відсоток для більших, менших розмірів зображень порівняно з базовим зображенням,

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

Дякую!


1
Ваше запитання пояснюється в керівництві Android: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski

Відповіді:


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ресурси.

Що це означає, якщо ви робите зображення у 48 пікселів і плануєте підтримувати до 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.
Кевін Коппок

Як ви вирішите, що вам потрібно починати з 48dip? Скажімо, у вас під рукою лише планшет (mdpi), ви починаєте з випадкового розміру і повторюєте, поки він не виглядає «досить великим»?
phtrivier

@phtrivier Це просто розмір, який я використав як приклад. У цьому випадку це розмір піктограми панелі запуску. Який би розмір вам не потрібен для інших активів, залежить від вашого випадку використання.
Кевін Коппок

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

22

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

Створіть сценарій оболонки та вставте такий код:

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) для отримання оптимальних результатів.


4

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

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

Відповідно до публікації розробника Google Ніка Батчера в Google+

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

Знайдіть джерело тут


1

Ось мої розрахунки для збільшення та зменшення масштабу зображень для 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, коли є кілька зображень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.