Этот доклад я прочитал на Dribbble Meetup 2013, который прошел в Москве в День космонавтики. В нём описан мой процесс интеграции дизайна — то есть в каком виде передавать приложение от дизайнера к разработчику мобильных приложений. Выбор интсрументов, которые я использую в работе, и сам процесс сформировались опытным путём, методом проб и ошибок. Надеюсь, он поможет сохранить вам немного времени и избавит хотя бы от части рутинной работы. Так как презентация содержит достаточно большое количество слайдов, я решил разбить материал на две части. Первая часть — интеграция дизайна под платформу Android. Вторая — под iOS и Windows Phone, а также упомяну про Samsung Bada. Дальше — много картинок.
Проблематика
А начну я свой рассказ с момента, когда мы уже нарисовали макеты нашего приложения. Всё выглядит идеально, всё выверено до пикселя.
Мы отдаем макеты в разработку, а на выходе получаем ЭТО.
Почему?! Ответ очевиден. Виноваты программисты, которые криво всё запрогали… На самом деле, НЕТ! Еще до начала работы программистов, дизайнер должен передать им спецификацию дизайна (ТЗ), которую дизайнер обычно делает спустя рукава, или что еще хуже, вообще не делает. Поэтому программист и вынужден делать всё на своё усмотрение, раз нету четкой инструкции.
Специфкация дизайна (ТЗ)
Итак, под спецификацией дизайна я понимаю набор файлов, которые дизайнер передает программистам. По сути, их создание и есть процесс интеграции дизайна. У Microsoft и Google это называется blue, red, green lines. У меня это три папки: Metrics, Fonts, Res.
Составлению ТЗ надо уделить должное внимание, т.к. именно это видит конечный пользователь вашего продукта, а не макеты дизайнера.
Android
Рассмотрим интеграцию дизайна на примере 4-х основных в России мобильных платформ. И начну я с самого тяжелого для понимания… Android
Краткая теоретическая часть
Немного теории для понимания дальнейшего процесса. Ни для кого не секрет, что экраны телефонов имеют разные разрешения и разные диагонали, то есть экраны характеризуются разной плотностью. Она измеряется в точках на дюйм. Выделяют 4 основных категории плотности экрана для Android-устройств: LDPI, MDPI, HDPI, XHDPI, XXHDPI (пока не берём в расчёт). Поэтому, чтобы элементы интерфейса имели одинаковый физический размер на экранах разных устройств, компания Google ввела абстрактную единицу измерения — DP.
Не будем вдаваться в подробности откуда появляются эти цифры, а для себя запомним, что один dp равен одному физическому пикселю для экранов с плотностью MDPI. Соответственно, для XHDPI-экранов, 1 dp будет равен 2 px (такая плотность, например, у Google Nexus 4).
Практическая реализация
Теперь приступаем к практической реализации. Дальше будет описан мой процесс работы, который сформировался опытным путем. Надеюсь, он будет вам полезен.
Metrics
Итак, папка Metrics должна содержать файлы с размерами элементов, отступами между ними и от края экрана, цвета однотонных элементов — то, что делается программно (например, разделители).
Все размеры для разработчиков должны быть указаны в DP.
Я делаю макеты для XHDPI-экранов (768x1280, Nexus 4). А как мы помним, для XHDPI 1 dp = 2 px. Но так как Photoshop, естественно, не понимает dp, а работает с пикселями, то сначала я делаю так, чтобы 1 dp ровнялся 1 px. Заходим в Image, жмём Image Size, и выставляем значение 50%. Готово, теперь 1 dp = 1 px.
Можно приступить, так сказать, к «образмериванию» макета. Делать это вручную было очень утомительно, и недавно мне попалось на глаза очень полезное раcширение для Photoshop.
PNG EXPRESS — платное расширение, стоит 29 баксов. Но оно реально того стоит. Для Photoshop, начиная с версии CS5. Оно позволяет делать много полезных вещей, но я использую его, именно, для «образмеривания».
Пример
Шаг 1. Допустим, нам надо указать размер между иконкой X (удалить) и текстом Discard.
Шаг 2. Просто выделяем эти два слоя в Photoshop и в PNG EXPRESS жмем Margins.
Шаг 3. Расширение само нарисует размеры. Если размер получился неверным, наш дизайнерский косяк, редактируем его как обычный текстовый слой Photoshop.
Хоть мы получаем не полностью автоматизированный процесс, всё же это расширение экономит кучу времени.
Fonts
Папка Fonts должна содержать файлы со всем, что касается шрифтов: размер, цвет, начертание, Photoshop-стили и т.д. Я вынес ее отдельно от размеров, чтобы программистам было легче разобраться в таком большом обилии выносок, тем самым сократив количество ошибок.
Все размеры шрифтов должны быть указаны в SP
1 SP = 1 DP, если в настройках размер шрифта операционной системы установлен по умолчанию. Если у пользователя проблема со зрением, он может в настройках системы увеличить шрифт. Если вы задали размер шрифта в SP, то ваше приложение подстроится под пользователя и также увеличит шрифт. Если в других единицах, то шрифт останется неизменным.
Пример
Шаг 1. Если нам надо указать шрифт у кнопки Done, то
Шаг 2. Выделяем этот слой в Photoshop и в PNG EXPRESS жмем Spec Font Features.
Шаг 3. Получили полное описание шрифта.
Опять сэкономили кучу времени.
Resources
Папка Res должна содержать ресурсы графики для вашего приложения. Это 4 подпапки для каждой плотности экрана.
Для этого я использую другое расширение.
Cut & Slice me — бесплатное расширение для Photoshop. Только для CS6. Оно позволяет делать всю эту работу в один клик.
Изначально наш PSD-макет должен быть для XHDPI.
Пример
Шаг 1. Нам надо нарезать иконки для нашего приложения.
Шаг 2. Каждую иконку помещаем в папку, в конец названия которой добавляем @. Таким образом, скрипт определяет, что эту папку надо нарезать.
Шаг 3. Переходим во вкладку Android, жмем Cut all assets.
Шаг 4. Расширение автоматом нарезает наши иконки для 4-х нужных плотностей экрана и помещает их в соответствующие папки.
Оставшиеся две кнопки в Cut & Slice me для нарезки из выбранном подпапки и текущего выбранного слоя.
Иногда возникает проблема «мыльных» пикселей, то есть когда иконка не попадает в пиксельную сетку при ресайзе. Поэтому надо пройтись по папкам, просмотреть качество выполненной скриптом работы. Если необходимо, поправить вручную. Опять сэкономили кучу времени.
9.PNG
И еще про графику. Все кнопки и плашки для Android нарезаются не фиксированного размера, а делаются «резиновыми».
Для этого используется формат 9.png. Делаюся такие файлы из обычных png в NinePatchEditor. По сути, к исходной картинке добавляется с каждой стороны еще один пиксель, залитый черным цветом. Черный пиксель слева отвечает за то, как будет «тянуться» ваша картинка по вертикали, сверху — за горизонталь. Пиксель справа и снизу — за размещение контетна внутри кнопки.
Всё!
Продолжение: Интеграция дизайна мобильных приложений. Часть 2: iOS, Windows Phone