Стикер-центр Android, что это такое

Обновлено: 31.01.2023


За 6 лет работы мы помогли более чем 150 компаниям спроектировать
и создать успешные мобильные и веб-приложения.

Мы предлагаем:
✅ Выделенную команду
✅ Расширенную команду
✅ Разработка продукта с нуля

Содержание

В этой статье вы узнаете, как рисовать текст на холсте, размещать и обновлять его в режиме реального времени на основе данных, вводимых пользователем, а также перемещать, поворачивать и масштабировать его.

неверный код
< /p>

В предыдущей статье мы поделились своим опытом создания стикеров в стиле Snapchat для Android и управления ими. Он получил очень положительные отзывы, поэтому мы решили поделиться своим опытом создания подобных текстовых стикеров.

Конечно, изображения гораздо популярнее текста. Тем не менее, точное выражение лица может сделать фотографии еще смешнее.

Содержание этой статьи основано на предыдущей реализации стикеров с изображениями — здесь.

Пожалуйста, проверьте это, прежде чем двигаться дальше.

Вызовы

«Почему бы просто не использовать EditText?», — спросите вы. Кстати, хороший вопрос.

Во-первых, EditText — это представление, и оно поставляется со всеми его зависимостями, такими как контекст. Это неудобно и накладно в нашем случае. Кроме того, EditText не позволит нам использовать наше решение вне области действия Android (например, при экспорте созданного изображения в фоновом потоке).

Во-вторых, EditText может выглядеть по-разному в зависимости от устройства или версии API. Мы хотим, чтобы наше решение не зависело от устройства и версии ОС.

Поэтому мы решили использовать собственную реализацию для простоты и гибкости.

Модель

Мы хотели бы повторно использовать класс Layer из предыдущей реализации и добавить необходимые параметры: Font и Text. Класс TextLayer будет выглядеть так:

Довольно просто, правда?

Однако есть еще одна важная вещь. Поскольку мы рисуем текст на растровом изображении, мы не хотим, чтобы пользователи масштабировали растровое изображение так, чтобы текст стал размытым. Чтобы предотвратить это, мы ограничим максимальный масштаб текстовой наклейки 1,0. А для создания более крупного текста пользователю придется увеличить размер шрифта.

Рисование многострочного текста

Когда дело доходит до рисования многострочного текста на холсте, вашим лучшим другом, скорее всего, станет StaticLayout — макет для текста, который не будет редактироваться после того, как он будет размещен. Впервые я наткнулся на StaticLayout в блоге Ивана Косияна:

С StaticLayout рисовать становится довольно легко. Создайте текст Paint, создайте StaticLayout, рассчитайте размер растрового изображения, расположите текст там, где это необходимо, и просто вызовите staticLayout.draw(canvas). См. полный код:

Ниже приведено несколько примеров того, как может выглядеть текст с разными цветами, гарнитурой шрифта и размером шрифта.

различный шрифт и размер шрифта

Обратите внимание, что мы также можем использовать DynamicLayout — текстовый макет, который обновляется по мере редактирования текста. Однако для простоты этого примера мы решили использовать StaticLayout.

Внешний вид текста

Шрифты довольно просты в использовании. Поместите файлы «.tff» в папку «. /src/main/assets/fonts», а затем извлеките их с помощью следующей команды:

Примечание. "Typeface.createFromAsset" – сложная операция. Чтобы обеспечить наилучшее взаимодействие с пользователем и предотвратить отставание вашего пользовательского интерфейса, кэшируйте и повторно используйте шрифты.

Для подбора цвета можно использовать буквально любую библиотеку. Мы использовали причудливую палитру цветов от QuadFlask.

В качестве панели редактирования мы добавили простой макет ImageButtons. Возможные варианты: Уменьшить размер шрифта, Увеличить размер шрифта, Выбрать цвет, Выбрать шрифт, Редактировать текст.


Значение шага размера шрифта (увеличение/уменьшение) было тщательно подобрано и после тысяч экспериментов было выбрано значение 0,08. Это значение обеспечивает наилучшее взаимодействие с пользователем. Так мы обычно оправдываем наличие магических чисел в коде (:ухмыляясь:).

Захват пользовательского ввода

Теперь, когда у нас есть все необходимое для рисования текста, пришло время зафиксировать ввод данных пользователем.

Да, я знаю, у нас эта проблема только потому, что мы не использовали EditText.Тем не менее, я все еще считаю, что оно того стоило.

Первоначальная идея состояла в том, чтобы создать пользовательское представление, которое будет фиксировать вводимые пользователем данные. Однако мы хотели реализовать его таким образом, чтобы клавиатура скрывалась всякий раз, когда пользователь печатает в любом месте экрана (кроме клавиатуры, конечно). С любым представлением, которое было бы сложным, мы не хотим добавлять миллионы прослушивателей кликов.

Один из компонентов Android, который можно красиво добавить поверх чего угодно, — это DialogFragment. Мы добавили невидимый EditText в диалоговое окно, которое перехватывало пользовательский ввод и передавалось через обратный вызов родительскому действию. Пара волшебных атрибутов сделала Диалог невидимым и полноэкранным:

Хорошо отметить, что всякий раз, когда вы работаете с графикой на Android, следите за монитором памяти. Обычно это отличный показатель того, делаете ли вы что-то неправильно. Когда я взглянул на график, активно печатая на клавиатуре в приложении, я заметил следующий рисунок:

использование памяти и ЦП
< /p>

Несмотря на то, что общее потребление памяти было нормальным, частые скачки указывали на то, что большая часть памяти была потрачена зря.

Быстрая отладка показала, что я создал слишком много ненужных растровых изображений (хотя выпустил их правильно). По сути, в первой реализации каждый раз при изменении текста создавалось новое растровое изображение. Это было крайне неэффективно.

Простым решением было повторное использование предыдущего растрового изображения (если размер не изменился). Вот как параметр «reuseBmp» был введен в метод «createBitmap» в классе TextEntity.

Эта простая оптимизация позволила получить плоскую диаграмму потребления памяти даже при активном вводе:

Использование памяти и ЦП при повторном использовании растровых изображений

Обратите внимание, что загрузка ЦП также снизилась, когда мы начали повторно использовать растровые изображения.

Жесты

Поскольку TextEntity расширяет класс MotionEntity, TextEntity автоматически унаследовал все функции управления — перемещение, масштабирование, вращение.

Мы добавили еще один жест для текстовых стикеров: автоматически начинать редактирование при двойном касании. Надеемся, что Android сможет обнаруживать двойное касание с помощью GestureDetector.SimpleOnGestureListener.

Все, никаких новых жестов.

Результат

Вот видео того, что у нас получилось.

Посмотрите исходный код на Github, загрузите приложение в Google Play.

Не стесняйтесь использовать его в своих целях. Дайте мне знать, если у вас возникнут проблемы с этим.

Каков ваш опыт рисования текста на холсте на Android? А с манипулированием этим текстом? Не стесняйтесь делиться/задавать вопросы в комментариях, буду рад помочь.


До появления Siri Shortcuts существовал Launch Center Pro — умная утилита для iOS, которая в течение многих лет позволяла пользователям iPhone автоматизировать более сложные задачи, создавая ярлыки. Например, вы можете найти в Yelp ближайшую кофейню, перейти прямо к камере в Instagram или отправить сообщение любимому человеку, среди прочего — и все это прямо из виджета в Центре уведомлений. Теперь компания придумала новый подход к автоматизации приложений. Вместо того, чтобы просто нажимать на виджеты и кнопки, в приложении реализована поддержка наклеек NFC.

NFC, если вы не знаете, – это та же технология, которая используется для беспроводных платежей, таких как Apple Pay.

И, наконец, с выпуском iOS 12 этой осенью Apple открыла возможности NFC для разработчиков приложений. Это означает, что владельцы iPhone с более новыми моделями устройств могут использовать метки NFC для запуска действий, например запуска приложений. В настоящее время он работает на iPhone XS, XS Max и XR. (iPhone 7 и новее могут использовать только сканирование NFC в приложении, но не метки NFC.)

Launch Center Pro быстро воспользовался преимуществами этой новой функции, создав собственные метки NFC в виде наклеек.


Наклейки, которые продаются в Интернете и в приложении, добавляют физическую ссылку на цифровые задачи, — объясняет разработчик Launch Center Pro Дэвид Барнард.

"Говорят, что если вы хотите бегать каждое утро, ставьте кроссовки рядом с кроватью, чтобы видеть их каждое утро", – говорит он. «Вы все еще можете не бегать, но обувь — это напоминание о том обязательстве, которое вы взяли на себя.То же самое с наклейками; они дают дополнительный визуальный сигнал к действию, даже если вы могли бы сделать то же самое без стикера», – добавляет Барнард.

Кроме того, стикеры – это более быстрый способ запуска задач по сравнению со смахиванием для просмотра, а затем нажатием на виджет "Сегодня" на вашем устройстве.

Во время бета-тестирования тестировщики использовали стикеры для различных задач, например запускали маршрут к следующему мероприятию с стикера, помещенного в машину, или чтобы отправить свое ожидаемое время прибытия любимому человеку и запустить маршрут домой. Другие тестировщики помещают наклейку в холодильник, чтобы запустить список покупок, в который можно добавить новые товары; или расклеивали стикеры по всему дому, чтобы активировать ярлыки HomeKit; или прикрепите к их кровати наклейку, чтобы помочь им установить будильник, и т. д.

По сути, все, что вы постоянно делаете на своем iPhone, может быть связано с одной из наклеек.

Поддержка наклеек является частью более широкой версии 3.0, в которой также добавлены новые функции, такие как темы, поддержка альтернативных значков приложений, расширенное планирование задач (теперь задачи могут иметь несколько расписаний), поддержка «Добавить в Siri» и больше.

Примечательно, что сейчас приложение переходит на бесплатную бизнес-модель, когда разовая покупка или подписка открывает доступ ко всем функциям.

Для тех, кто купил платное приложение в прошлом, вы можете продолжать использовать функции, за которые вы заплатили, без подписки, и вам нужно будет только приобрести доступ к новым функциям 3.0, которые вы хотите использовать. При желании их можно купить единовременно.

Для новых пользователей приложение стоит 9,99 долларов США в год или 30 долларов США в качестве единовременной покупки, чтобы разблокировать все функции. Для любого поклонника автоматизации это достойное вложение денег в экономию времени.

Читайте также: