Transitions API: делаем анимацию для Android приложений
При всей важности и распространенности анимации в мобильной разработке программисты отмечают, что в Android-приложениях её создание всегда было непростой задачей.
В то время как iOS давно предоставляет удобные инструменты для анимирования интерфейсов, в Android решения, позволяющие оптимизировать труд разработчиков, появились относительно недавно. Однако с ними жизнь специалистов определенно заиграла новыми красками.
Инструменты, о которых мы расскажем сегодня, — это удобное решение для самых разных анимаций: вместо отдельных экранов программист анимирует так называемые сцены, а переходы между ними генерируются автоматически при помощи Transition API — и это лишь верхушка айсберга возможностей. И если вы еще не используете эту технологию на своих проектах — самое время попробовать!
Transitions API: как это работает?
Уже в Android 4.0 существовал ранний вариант решения проблемы с анимацией — флаг animateLayoutChange для ViewGroup. Однако этот инструмент был недостаточно гибким и не мог обеспечить разработчику полный контроль над переходами (Transitions). В Android 4.4 KitKat и выше были реализованы Transitions API. Поскольку Transitions API также есть в саппорт-библиотеке, теперь с их помощью можно упростить работу с анимацией практически на любом девайсе под Android.
Именно в KitKat Transition API появляется такое понятие как сцена — Scene, и Transition — переход между сценами. Для определения корневого layout вводится понятие Scene root, внутри которого и происходит изменение сцен. При этом сама сцена по сути является враппером над ViewGroup, описывающим своё состояние и состояние объектов View в нем.
Сам Transition — механизм, который позволяет считывать параметры View, изменяющиеся от сцены к сцене, и генерировать анимации для создания плавных переходов между ними.
Transition Framework предоставляeт следующие возможности для создания анимаций:
- Group-level animations: возможность анимировать целые иерархии объектов View. Разработчик указывает ViewGroup, которую нужно санимировать, и анимации автоматически применяются к каждому её элементу;
- Transition-based animation: анимации, основанные на переходах;
- Built-in animations: простые встроенные анимации, которые генерируются автоматически, такие как растворение, затемнение, изменение размера, движение и т.д.;
- Resource file support: поддержка файлов ресурсов, в которых может быть записано, что и как анимировать. Таким образом, необязательно прописывать все анимации в коде;
- Lifecycle callbacks: предоставляет все необходимые методы контроля за воспроизведением анимации;
При всех своих достоинствах данный метод создания анимаций имеет и некоторые ограничения:
- Может давать сбои, если применяется к наиболее сложным SurfaceView и TextureView, работающим не в UI потоке, что ведет к рассинхронизации анимации.
- Плохо работают AdapterView, такими как ListView, когда в них необходимо анимировать отдельные элементы.
- Периодически возникают проблемы с синхронизацией при попытке изменить размер TextView: шрифт может отобразиться в следующей сцене до того, как закончилось изменение остальных объектов.
Однако эти ограничения вряд ли можно назвать существенными: в практике ситуации, когда нужно применить анимацию, к примеру, к SurfaceView, встречаются крайне редко.
Рассмотрим примеры работы с Transition FrameworksСоздание сцены из ресурса:
Создание сцены из кода:
Сами Transitions также создаются на базе ресурса:
Или кода:
Есть возможность создавать целые сеты анимаций, например, одновременное движение, изменение размера и затемнениеВ ресурсе:
В коде:
Еще одна возможность — применить анимацию не ко всей сцене, а к отдельному объекту ViewTransition manager создается одной строчкой кода. Он существует для того, чтобы прописать все сцены и переходы в одном месте. Это позволяет существенно сократить объем работ и упростить дальнейший контроль над анимацией:
Как запускать сцены? Очень просто!С кастомными Transitions:
C Transitions по умолчанию:
Или без Transitions:
Использовать переходы можно и отдельно, не создавая сценыПри помощи логичного и интуитивно понятного интерфейса TransitionListener вы можете контролировать каждый шаг любой анимации:
Помимо встроенных вы можете создавать и собственные анимации. Например, так можно изменить цвет фона View:
Промежуточные значения генерируются автоматически, поэтому в нашем примере цвет плавно изменится с красного на синий. Этот метод открывает широкие возможности для создания самых разных кастомных анимаций и переходов: здесь фантазия разработчика ограничивается лишь требованиями конкретного проекта.
Почему это важно?
Ускорение и упрощение процесса создания анимации добавляет драйв в разработку мобильных приложений. Команда Azoft отнеслась к Transitions API с энтузиазмом: мы уже используем их в своих проектах. Возможность создавать анимацию при помощи сцен, экономя время и силы, оказалась полезной как нашим разработчикам, так и клиентам, которые теперь могут быстрее получить готовое приложение.
Расскажите нам о своем опыте создания анимации для Android: используете ли вы Transitions API? Какие есть плюсы и минусы у этого и других методов, с которыми вы работали?
- Поделиться в Facebook
- Share on Linkedin
- Запостить в Twitter
- Сохранить в Pocket
- 0 Репосты
Подпишитесь
Оставьте адрес, и каждый месяц мы будем высылать свежую статью о новых трендах в разработке програмного обеспечения.