LottieFiles анонсировали плагин для After Effects.
Он позволяет: • Экспортировать анимации для Lottie и анимированные стикеры для Telegram (вау) • Показывать превью анимации на iOS, Android и в вебе • Заливать свои файлы в LottieFiles и скачивать чужие • Улучшать перформанс анимации с помощью графика отрисовки (как в приложении Lottie)
Когда вы удаляете мастер-компонент в Sketch, он предупреждает, что экземпляры компонента превратятся в группы. Figma сразу удаляет компонент, но его можно восстановить из экземпляра. У обоих подходов есть минусы — я не хочу видеть модалки и не хочу случайно потерять компонент, который где-то используется. Поэтому я написал плагин для Figma, который предлагает компромисс.
Команда Safe Delete удаляет компонент, только если его экземпляров нет в проекте. Бонусом я добавил команду Delete Unused Components — она удаляет компоненты, которые нигде не используется. Плагин показывает, какие компоненты он удалил, и в случае ошибки их можно вернуть с помощью ⌘+Z. Пока плагин работает, интерфейс фигмы может зависнуть, поэтому не советую запускать его на очень больших проектах.
Плагины в Figma работают на главном потоке и вешают интерфейс на время работы. Если вы пишите плагин, который обходит все объекты в документе, советую подсмотреть у меня реализацию функции hasInstances(). Она позволяет главному потоку хоть немного продохнуть и откликнуться на нажатие кнопки Cancel (но этот способ работает не всегда).
HttpMocker — это библиотека, которая подменяет реальные ответы сервера на заранее заготовленные. Полезно, если бэкенд для вашего приложения ещё не готов, вы хотите потестить специфичные сценарии и ошибки или просто подготовить красивые скриншоты для Google Play.
Кроме подмены, эта библиотека может записывать в файл реальные ответы сервера, чтобы их можно было использовать в качестве mock'ов.
Если вы пользуетесь приложениями не на английском языке, вы наверняка замечали как интерфейс иногда разъезжается от слишком длинных надписей. Макеты, которые я верстал, грешили тем, что перевод на другие языки в них никак не продумали. Я вооружился Гугл табличками и сделал инструмент, который поможет проверить, что перевод слова не длиннее, чем оригинал.
Как это работает:
1. Скопируйте табличку к себе в Google Sheets (File > Make a copy).
2. Выберите текст для кнопки или другого контрола, который не должен сильно меняться в размерах.
3. Вставьте текст в желтую ячейку рядом с Your text и укажите языковой код, если автоопределение языка не справляется.
4. Табличка подсветит красным переводы, которые длиннее оригинала. Если ячейка насыщенно красная — стоит выбрать другой текст или подумать о том, как кнопка будет выглядеть в переводе.
Я хочу развить эту идею дальше и сейчас понемногу пишу линтер для Android Studio, который предупредит о длинных локализациях в strings.xml. Возможно, когда-нибудь я напишу плагин для Sketch или Figma, а пока буду рад услышать ваш фидбек о табличке и самой идее в комментариях.
Google добавили гайдлайны по визуализации данных — какие есть типы графиков и как выбрать подходящий, как графики выглядят и работают, и как объединять их в дашборды. Ещё в блоге Google Design появилась статья о принципах визуализации данных.
Месяц назад я безуспешно искал гайды по дизайну графиков на мобильных устройствах, более или менее подходящей оказалась вот эта статья: Часть 1 | Часть 2
Если вы видели похожие материалы, но заточенные под мобайл, или сами дизайнили графики и вам есть, чем поделиться — напишите в личку (@kondenko), добавлю в пост 👌
SF Symbols — это набор настраиваемых иконок от Apple. В него входят больше 1500 символов в 6 стилях и с 9 вариантами жирности. Найти их можно в одноименном приложении для macOS.
В Human Interface Guidelines добавили новые разделы:
Также Apple объявили победителей Apple Design Awards. Помимо дизайна приложения отличились использованием технологий Apple — CoreML и Apple Pencil.
И если вы пропустили, то недавно Apple представили шрифт с засечками New York. Он хорошо работает как в паре с San Francisco, так и отдельно. Лицензия предупреждает, что использовать его можно только в мокапах интерфейса для платформ Apple. Скачать New York: https://developer.apple.com/fonts/
— SwiftUI — декларативный фреймворк для создания интерфейсов. Очень похож на Jetpack Compose, который показали на последней Google I/O.
Такой подход всегда казался мне неудобным по двум причинам: во-первых, мы раздуваем и без того большие классы экранов; во-вторых, мы увидим результат только после того, как сбилдим приложение. В Android Studio Hot Reload работает так же медленно, как обычный билд, поэтому на него рассчитывать не стоит. Но на презентации SwiftUI работал довольно быстро, а в новой Android Studio обещают улучшенный Hot Reload, поэтому попробовать выйти из зоны комфорта однозначно стоит.
Модели теперь можно локально дообучать на пользовательских данных, не жертвуя приватностью.
Улучшили поддержку нейронных сетей, компьютерного зрения, обработки естественного языка и генерации речи.
CreateML — приложение для Mac, с помощью которого можно создать и обучить ML-модель без опыта в машинном обучении.
— В Siri добавили поддержку диалогов в шорткатах, и подсказки, которые основаны на том, что происходит в приложениях.
— Sign In with Apple — это замена авторизации через соцсети. Теперь при входе в сервисы они получат только ваше имя и фейковую почту, через которую будут перенаправляться письма на вашу личную почту.
Как и обещал, делюсь конспектом Animation Handbook. Я собрал идеи, которые не повторяются в самой статье и то, чего не знал сам.
На самом деле лонгрид стоит прочитать целиком, потому что это отличное введение в моушн-дизайн. Суть в том, что анимации — не украшательство, а фундаментальная составляющая дизайна наряду с типографикой и цветами.
Приятно было увидеть в статье такой же воркфлоу, какой я выработал для своего проекта:
1) Рисую макет в Sketch, параллельно держу в голове то, как буду его анимировать 2) Экспортирую макет в After Effects с помощью aeux.io и анимирую 3) Завожу в приложении отдельную активити, перевожу анимацию в код и слежу, чтобы она смотрелась естественно 4) Переношу анимацию на экран, где она будет использоваться
Эта тема меня захватывает всё сильнее, поэтому буду дальше прокачивать свои анимационные скиллы и делиться опытом 👌
InVision выложили книгу Animation Handbook — набор лучших практик анимации в интерфейсах. Её написал Ryan McLeod, дизайнер и разработчик игры Blackbox, которая выиграла Apple Design Award в 2017 году.
В книге 4 главы:
— Purpose — зачем нужны анимации
— Principles — составляющие части хорошей анимации
— Collaboration — подход разных команд к созданию анимаций (Google с их Material Design и Zova Fitness, тоже выигравших Apple Design Award)
— Taking animation further — нюансы, которые выводят анимации на новый уровень
Если найду неочевидные мысли и клёвые идеи, соберу в заметку и поделюсь, а пока убежал читать 🏃♂️
В Android 8 появились адаптивные иконки приложений, которые по-разному отображаются на разных устройствах. Недавно Google объявили, что похожий механизм будет работать и на страницах приложений в Google Play Store. У всех иконок в магазине появится тень и скругление углов на 20%.
Начиная с 1 мая, обновления иконок в Play Store должны будут подходить под новые требования, а 24 июня все иконки переведут в легаси-режим — наложат их на белый квадрат с тенью. Загрузить иконку в новом стиле можно будет уже в начале апреля.
Когда-нибудь продакт менеджера заменят набором алгоритмов. А пока можно натренировать чеклист готовности дизайн задачи.
Описание 🧯 Какую проблему решаем? 🚪 Как пользователь попадает сюда?
Big picture 🗺 Карта кликов (все кликабельные элементы и переходы) 🌐 Big picture (вставить дизайн решение в весь видимый пользователю UI)
Состояния экранов 🖥 Breakpoints, например, 0+, 600+, 960+, 1280+, 1920+ 💻 Дополнительное поведение между брэйкпойнтами при необходимости 📱 Ограничение экрана по высоте, portrait vs landscape
Состояния элементов 🖱 Active, hover, clickable area ☀️ Светлая и тёмная темы 💬 Положительные и отрицательные сценарии, например, при вводе пользователем полей
Состояния контента ⏱ Пограничные состояния количества элементов контента (0, 1, несколько, сотня) 💾 Объём контента внутри элемента, например, мало или много текста 🎬 Первый шаг взаимодействия (что произойдёт в самом начале у пользователя без истории взаимодействия) 🏁 Последний шаг взаимодействия (что произойдёт, когда всё, что надо было показать, закончилось) 🦖 Заглушки, когда какая-то часть данных не придёт с сервера, например, изображение
Локализация 🇮🇩 Текст с большим количеством букв, например, индонезийский 🇨🇳 Иероглифы, например, simple chinese 🇦🇪 Right to left, например, арабский
Самоконтроль 📍 Масштабируемость (насколько сложно в дальнейшем будет поменять и добавить будущие решения) ✏️ Дальнейшее наполнение (как будет добавляться контент) 🔗 Консистентность с уже существующими дизайн решениями в продукте 🔧 Проверка технического решения (на реализуемость, на сроки, на переиспользование, caniuse с учетом поддерживаемых платформ)
Бывает, что рисуешь интерфейс, и он кажется каким-то "не таким". Зачастую это можно исправить без особых усилий. Поменять размер шрифта, увеличить отступы, переставить местами блоки, и вот уже другое дело. Подписчик @vintr_hd поделился списком советов, как сделать интерфейс лучше с помощью таких небольших изменений.
Когда много читаешь о дизайне, поток таких советов становится даже слишком большим. Хочется сразу начать применять их в работе, но запомнить всё не получается. Мне помогает собирать такие штуки у себя в заметках, по возможности раскидывать по категориям (формы, сообщения об ошибках, онбординг) и заглядывать, когда работаю над соответствующим элементом UI. Со временем они запоминаются и сами всплывают в памяти, когда нужно.
Сделал конспект классного доклада о работе с тачами и жестами в Android.
Один раз заказчик попросил фичу, для которой надо было написать View с кастомной обработкой свайпов. Статьи, которые я прочитал, окончательно меня запутали, и я пошел искать доклады. Первый же найденный доклад поставил всё на свои места. Делюсь этой годнотой с вами, а конспект советую добавить в закладки и пользоваться им, как шпаргалкой.
Небольшая заметка про то, как использовать Architecture Components и не косячить:
1. Когда подписываетесь на обновления LiveData во фрагменте, передавайте в метод observe не сам фрагмент (this), а viewLifecycleOwner. Это предотвратит создание новых Observer'ов при пересоздании view фрагмента, если сам фрагмент сохраняется во время смены конфигурации.
2. Загружайте данные для экрана не в методе onCreate/onCreateView, а в конструкторе ViewModel. Благодаря этому данные не будут загружаться заново каждый раз при смене конфигурации.
3. Если вы передаете ссылку на ViewModel объекту, который живет дольше, обнуляйте её в методе onCleared, чтобы Garbage Collector смог её уничтожить.
4. Убедитесь, что View из ViewModel получают LiveData, а не на MutableLiveData. View не должны изменять данные в LiveData.
5. Передавайте во ViewModelProvider не сами зависимости, а их провайдеры (class MyViewModelFactory(private val repository: Provider<MyRepository>)). Тогда зависимости не будут создаваться каждый раз, когда ViewModelFactory пересоздается при смене конфигурации.