отказ
Этот ответ с 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 компании могут разрабатывать свои мобильные телефоны и таблицы практически любого размера, практически с любым разрешением, которое они хотят. Из-за этого не существует «правильного размера изображения» для заставки, так как нет фиксированного разрешения экрана. Это создает проблему для людей, которые хотят реализовать заставку.
Ваши пользователи действительно хотят видеть заставку?
(Кстати, среди пользователей юзабилити несколько не рекомендуется использовать заставки). Утверждается, что пользователь уже знает, к какому приложению он прикоснулся, и маркировка вашего изображения заставкой не нужна, поскольку это только прерывает взаимодействие с пользователем. «объявление». Однако его следует использовать в приложениях, которые требуют некоторой значительной загрузки при инициализации (5 с +), включая игры и т. д., чтобы пользователь не застревал, задаваясь вопросом, произошло ли сбой приложения или нет)
Плотность экрана; 4 класса
Таким образом, учитывая огромное количество разных разрешений экрана в телефонах, представленных на рынке, Google реализовал несколько альтернатив и изящных решений, которые могут помочь. Первое, что вы должны знать, это то, что Android разделяет ВСЕ экраны на 4 различных плотности экрана:
- Низкая плотность (ldpi ~ 120dpi)
- Средняя плотность (MDP ~ 160 точек на дюйм)
- Высокая плотность (hdpi ~ 240 dpi)
- Сверхвысокая плотность (xhdpi ~ 320 точек на дюйм) (Эти значения точек на дюйм являются приблизительными, поскольку пользовательские устройства будут иметь различные значения точек на дюйм)
Из этого (если вы дизайнер) нужно знать, что Android в основном выбирает из 4 изображений для отображения в зависимости от устройства. Таким образом, вам в основном нужно создать 4 разных изображения (хотя может быть разработано больше для разных форматов, таких как широкоэкранный, портретный / альбомный режим и т. Д.).
Помните об этом: если вы не создадите экран для каждого отдельного разрешения, используемого в Android, ваше изображение растянется до размера экрана. И если ваше изображение в основном не градиентное или размытое, вы получите нежелательные искажения при растяжении. Таким образом, у вас есть два основных варианта: создать изображение для каждой комбинации размера / плотности экрана или создать четыре 9-патч-изображения.
Самым сложным решением является создание отдельного заставки для каждого разрешения. Вы можете начать, следуя разрешениям в таблице в конце этой страницы (их больше. Пример: 960 x 720 там не указан). И, предполагая, что у вас есть небольшая деталь на изображении, например, мелкий текст, вы должны создать более одного экрана для каждого разрешения. Например, изображение 480x800, отображаемое на среднем экране, может выглядеть нормально, но на меньшем экране (с более высокой плотностью / dpi) логотип может стать слишком маленьким или текст может стать нечитаемым.
9-патч
Другое решение состоит в том, чтобы создать изображение с 9 участками . По сути, это прозрачная граница размером 1 пиксель вокруг вашего изображения, и, рисуя черные пиксели в верхней и левой областях этой рамки, вы можете определить, какие части вашего изображения будут растягиваться. Я не буду вдаваться в подробности того, как работают изображения с 9 участками, но, вкратце, пиксели, которые выровнены с отметками в верхней и левой областях, - это пиксели, которые будут повторяться для растягивания изображения.
Несколько основных правил
- Вы можете сделать эти изображения в фотошопе (или любом программном обеспечении для редактирования изображений, которое может точно создавать прозрачные PNG).
- Граница в 1 пиксель должна быть ПОЛНОСТЬЮ ПРОЗРАЧНОЙ.
- Прозрачная граница в 1 пиксель должна быть вокруг всего изображения, а не только сверху и слева.
- Вы можете рисовать только черные (# 000000) пиксели в этой области.
- Верхняя и левая границы (которые определяют растяжение изображения) могут иметь только одну точку (1px x 1px), две точки (обе 1px x 1px) или ОДНУ непрерывную линию (ширина x 1px или 1px x высота).
- Если вы решите использовать 2 точки, изображение будет пропорционально увеличено (поэтому каждая точка будет увеличиваться по очереди, пока не будет достигнута окончательная ширина / высота)
- Граница в 1 пиксель должна быть в дополнение к предполагаемым размерам базового файла. Таким образом, изображение размером 100x100 с 9 патчами должно иметь размер 102x102 (100x100 + 1px сверху, снизу, слева и справа)
- 9-патч изображения должны заканчиваться * .9.png
Таким образом, вы можете разместить 1 точку по обе стороны от вашего логотипа (в верхней границе) и 1 точку выше и ниже ее (в левой границе), и эти отмеченные строки и столбцы будут единственными пикселями для растяжения.
пример
Вот изображение из 9 патчей, 102x102px (конечный размер 100x100, для целей приложения):
Вот 200% зум того же изображения:
Обратите внимание на отметки 1px сверху и слева, указывающие, какие строки / столбцы будут расширяться.
Вот как это изображение будет выглядеть в 100x100 внутри приложения:
А вот что было бы, если бы оно было расширено до 460x140:
И последнее, что нужно учитывать. Эти изображения могут хорошо смотреться на экране вашего монитора и на большинстве мобильных телефонов, но если устройство имеет очень высокую плотность изображения (dpi), изображение будет выглядеть слишком маленьким. Вероятно, все еще разборчиво, но на планшете с разрешением 1920x1200 изображение будет выглядеть как очень маленький квадрат в середине. Так в чем же решение? Создайте 4 разных изображения запуска с 9 патчами, каждое для разного набора плотности. Чтобы гарантировать, что сжатие не произойдет, вы должны разработать самое низкое общее разрешение для каждой категории плотности. Сжатие здесь нежелательно, потому что 9-патч учитывает только растяжение, поэтому в процессе сжатия мелкий текст и другие элементы могут потерять разборчивость.
Вот список самых маленьких, наиболее распространенных разрешений для каждой категории плотности:
- xlarge (xhdpi): 640x960
- большой (hdpi): 480x800
- средний (mdpi): 320x480
- маленький (ldpi): 240x320
Поэтому создайте четыре заставки в указанных выше разрешениях, разверните изображения, поместив прозрачную рамку размером 1 пиксель вокруг холста, и отметьте, какие строки / столбцы будут растягиваться. Имейте в виду, что эти изображения будут использоваться для ЛЮБОГО устройства в категории плотности, поэтому изображение ldpi (240 x 320) может быть растянуто до 1024x600 на очень большом планшете с небольшой плотностью изображения (~ 120 dpi). Таким образом, 9-patch - лучшее решение для растяжки, если вы не хотите, чтобы фотография или сложная графика использовались для заставки (имейте в виду эти ограничения при создании дизайна).
Опять же, единственный способ избежать этого растяжения - создать один экран для каждого разрешения (или один для каждой комбинации плотности разрешения, если вы хотите избежать слишком маленького / большого размера изображений на устройствах с высокой / низкой плотностью) или указать изображение, которое не растягивается и имеет фоновый цвет, появляется везде, где может произойти растяжение (также помните, что определенный цвет, отображаемый движком Android, вероятно, будет отличаться от того же конкретного цвета, отображаемого в фотошопе, из-за цветовых профилей).
Я надеюсь, что это имело какой-то смысл. Удачи!