Відмова від відповідальності
Ця відповідь є з 2013 року і серйозно застаріла. Станом на Android 3.2 зараз існує 6 груп щільності екрана. Ця відповідь буде оновлена, як тільки я зможу, але без ETA. Зверніться до офіційної документації про всі щільності на даний момент (хоча інформацію про конкретні розміри пікселів як завжди важко знайти).
Ось версія tl / dr
Створіть 4 зображення, по одному для кожної щільності екрана:
- xlarge (xhdpi): 640x960
- великий (hdpi): 480x800
- середовище (mdpi): 320x480
- малий (ldpi): 240x320
Прочитайте введення 9-латкових зображень у Посібнику для розробників Android
- Дизайн зображень із областями, які можна безпечно розтягнути, не пошкоджуючи кінцевий результат
Завдяки цьому Android вибере відповідний файл за щільністю зображення пристрою, після чого він розтягне зображення відповідно до стандарту 9 патчів.
кінець tl; dr. Повний пост вперед
Я відповідаю стосовно дизайнерського аспекту питання. Я не розробник, тому не можу надати код для реалізації багатьох запропонованих рішень. На жаль, мій намір - допомогти дизайнерам, які втратили так само, як і я, коли я допоміг розробити свій перший додаток для Android.
Підходить для всіх розмірів
За допомогою Android компанії можуть розробляти свої мобільні телефони та таблиці практично будь-якого розміру, майже з будь-якою потрібною роздільною здатністю. Через це не існує "правильного розміру зображення" для екрана заставки, як і немає фіксованої роздільної здатності екрана. Це створює проблему для людей, які хочуть реалізувати екран заставки.
Чи дійсно ваші користувачі хочуть бачити екран із сплеском?
(Зі сторони, екрани сплеск дещо відлякують серед юнаків із зручності використання. Стверджується, що користувач уже знає, яку програму він натиснув, і проклеювати ваше зображення за допомогою екрана заставки не потрібно, оскільки це лише перериває роботу користувача з "Оголошення". Однак його слід використовувати в додатках, які потребують значного завантаження при ініціалізації (5s +), включаючи ігри та інше, щоб користувач не зациклювався на цікавості, вийшов з ладу додаток чи ні)
Щільність екрана; 4 класи
Отже, враховуючи стільки різних дозволів екрана в телефонах на ринку, Google реалізував деякі альтернативи та чудові рішення, які можуть допомогти. Перше, що вам потрібно знати, це те, що Android розділяє ВСІ екрани на 4 чіткі щільності екрана:
- Низька щільність (ldpi ~ 120dpi)
- Середня щільність (mdpi ~ 160dpi)
- Висока щільність (hdpi ~ 240dpi)
- Надвисока щільність (xhdpi ~ 320dpi) (Ці значення dpi є наближенням, оскільки вбудовані пристрої на замовлення матимуть різні значення dpi)
Що ви (якщо ви дизайнер) з цього потрібно знати, це те, що Android в основному вибирає з 4 зображень для відображення, залежно від пристрою. Таким чином, вам в основному потрібно створити 4 різних зображення (хоча можна розробити більше для різних форматів, таких як широкоекранний, портретний / пейзажний режим тощо).
Зважаючи на це, знайте це: якщо ви не спроектуєте екран для кожної окремої роздільної здатності, яка використовується в Android, ваше зображення розтягнеться на розмір екрана. І якщо ваше зображення в основному не буде градієнтом або розмиттям, ви отримаєте кілька небажаних спотворень при розтягуванні. Отже, у вас є два варіанти: створити зображення для кожної комбінації розміру / щільності екрана або створити чотири 9-латні зображення.
Найскладніше рішення - розробити різний екран з бризками для кожної окремої роздільної здатності. Ви можете почати, дотримуючись дозволів у таблиці в кінці цієї сторінки (їх є більше. Приклад: 960 x 720 там не вказано). І якщо припустити, що у вас є невеликі деталі на зображенні, наприклад, невеликий текст, вам потрібно розробити більше одного екрана для кожної роздільної здатності. Наприклад, зображення розміром 480x800, що відображається на середньому екрані, може виглядати нормально, але на меншому екрані (з більш високою щільністю / dpi) логотип може стати занадто маленьким, або якийсь текст може стати нечитабельним.
9-патч-зображення
Інше рішення - створити 9-патч-зображення . Це в основному прозора рамка на 1 піксель навколо вашого зображення, і, намалювавши чорні пікселі у верхній та лівій частині цієї рамки, ви можете визначити, на які ділянки зображення буде дозволено розтягуватися. Я не буду вникати в деталі того, як працюють 9-патч-зображення, але, коротше кажучи, пікселі, які вирівнюються до маркування у верхній та лівій частині, - це пікселі, які будуть повторені для розтягування зображення.
Кілька основних правил
- Ви можете зробити ці зображення у Photoshop (або будь-яке програмне забезпечення для редагування зображень, яке може точно створювати прозорі PNG).
- Рамка в 1 пікселі повинна бути ПОВНОЮ ПРОЗРАЧНОСТІ.
- Прозора рамка з 1 пікселем повинна бути навколо вашого зображення, а не лише зверху та зліва.
- ви можете намалювати лише чорні (# 000000) пікселі в цій області.
- Верхня та ліва межі (які визначають розтягнення зображення) можуть мати лише одну крапку (1 px x 1px), дві крапки (обидві 1px x 1px) або ONE ONE безперервну лінію (ширина x 1px або 1px x висота).
- Якщо ви вирішите використовувати 2 крапки, зображення буде пропорційно розширене (тому кожна точка буде по черзі розширюватися до досягнення кінцевої ширини / висоти)
- Рамка 1px повинна бути додатково до призначених розмірів базового файлу. Отже, 9-патчне зображення розміром 100x100 має насправді мати 102x102 (100x100 + 1px вгорі, внизу, зліва та справа)
- 9-латні зображення повинні закінчуватися * .9.png
Таким чином, ви можете розмістити по 1 крапці на будь-якій стороні вашого логотипу (у верхній облямівці) та 1 крапці над і під ним (зліва) та ці позначені рядки та стовпці будуть єдиними пікселями для розтягування.
Приклад
Ось 9-патчне зображення, 102x102px (остаточний розмір 100x100, для цілей програми):
Ось таке зображення на 200%:
Зверніть увагу на позначки 1px вгорі та зліва, кажучи, які рядки / стовпці будуть розширюватися.
Ось як виглядатиме це зображення у форматі 100x100 всередині додатка:
А ось що б це хотілося, якби розширити до 460x140:
Останнє, що слід врахувати. Ці зображення можуть виглядати чудово на екрані монітора та на більшості мобільних телефонів, але якщо пристрій має дуже високу щільність зображення (dpi), зображення виглядатиме занадто мало. Напевно, все ще розбірливий, але на планшеті з роздільною здатністю 1920х1200 зображення виглядатиме як дуже маленький квадрат посередині. То яке рішення? Створіть 4 різних 9-патч-пускових зображень, кожен для різного набору щільності. Щоб переконатися, що не відбувається усадки, слід створити найменшу загальну роздільну здатність для кожної категорії щільності. Усадка тут небажана, оскільки 9-патч припадає лише на розтяжку, тому в процесі скорочення невеликий текст та інші елементи можуть втратити розбірливість.
Ось список найменших, найпоширеніших роздільних можливостей для кожної категорії щільності:
- xlarge (xhdpi): 640x960
- великий (hdpi): 480x800
- середовище (mdpi): 320x480
- малий (ldpi): 240x320
Отож спроектуйте чотири екрани з вибухом у вищезазначених роздільних резолюціях, розгорніть зображення, поставивши навколо полотна прозору межу розміром 1 пікселя та позначте, які рядки / стовпчики будуть розтяжними. Майте на увазі, що ці зображення використовуватимуться для будь-якого пристрою категорії щільності, тому зображення ldpi (240 x 320) може бути розтягнуте до 1024x600 на додатково великому планшеті з невеликою щільністю зображення (~ 120 dpi). Тож 9-патч - це найкраще рішення для розтягування, доки ви не хочете фотографії чи складної графіки для екрана заставки (пам’ятайте про ці обмеження під час створення дизайну).
Знову ж таки, єдиний спосіб, щоб цього розтягнення не відбулося, - це створити по одному екрану кожну роздільну здатність (або по одному для кожної комбінації щільності роздільної здатності, якщо ви хочете, щоб зображення не стали занадто маленькими / великими на пристроях високої / низької щільності), або сказати зображення не розтягуватиметься та має фоновий колір, де б не відбувалося розтягнення (також пам’ятайте, що певний колір, відображений двигуном Android, мабуть, буде відрізнятися від того ж конкретного кольору, який надає фотошоп, через кольорові профілі).
Сподіваюся, це мало сенс. Удачі!