3 анимация компонентов пользовательского интерфейса в android

При программировании под андроид можно использовать уже ряд готовых анимаций переходов между экранами. Но что если дизайнер придумал более изощренные переходы? Рассмотрим какие есть возможности реализовать нестандартные смены экранов.

Активити и фрагменты

От того, используются ли переходы между Activity или все происходит в рамках разных фрагментов зависит и то, какие инструменты предлагает система для переходов между экранами.

Приложение с несколькими Activity

Когда используете несколько Activity, то можно использовать простые анимации переходов или создать красивые эффекты с shared element.

Простой переход между Activity

Можно использовать либо готовые переходы, которые предоставляет Android, либо определить свой, например

Можно либо переопределить переходы для всех Acitivty в теме приложения

Либо же переопределить переход в рамках отдельной Acitivty, вызвав

в onCreate вызываемой Activity.

Shared Element Transition

Суть shared element transition в том, что общий элемент перетекает между двумя экранами, создавая видимость целостности двух Activity между собой.

Берете View с одного экрана. Говорите системе, что view с тем же id есть на следующем. Запускаете переход.

Остальное Android OS все сделает за вас.

Single activity application

Суть single activity application в его названии. Ваше приложение будет состоять из одной активности, а экраны внутри будут реализованы как фрагменты. Такой подход придает гибкость и контролируемость переходам. В рамках View можно делать абсолютно что угодно.

Вы можете управлять любой View, применять любые transition и т.д. С Activity такое не прокатит, потому что слушать или влиять на скорость отработки закрытия и открытия активности на прямую не получится.

Архитектура переходов между фрагментами одной activity

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

Не обязательно использовать Single из RxJava, можно установить любой тип callback. Метод exit() должен вернуть нечто, что можно “слушать” на предмет исполнения. Fragment, который должен поддерживать “выход” будет реализовывать интерфейс, приведенный выше.

Далее необходимо при переходе между фрагментами вызвать exit(). Подождать, когда Fragment исполнит необходимую анимацию, а затем перейти на новый Fragment, который может запустить анимацию “старта”.

Если вы используете, например Cicerone, то можно переопределить свой AnimatedSupportAppNavigator

Происходит все тоже самое, что в Cicerone, только теперь, если Fragment поддерживает анимацию выхода, сначала проиграется она.

Анимация открытия и закрытия Fragment

Анимация выхода из Fragment

Сам Fragment реализуя exit() проигрывает анимацию выхода и отдает управление дальше.

Для простоты используется AdditiveAnimation. Он позволяет легко управлять анимацией разных элементов и слушать окончание проигрывания.

Анимация входа во Fragment

При необходимости в onViewCreated можно запустить анимацию “входа”.

Это лишь база, необходимая для того, чтобы понимать как можно осуществлять навигацию между Activity и Fragment. Более сложные примеры зависят уже от конкретной задачи и прихоти дизайнера. Имея доступ к анимации на уровне View можно сделать любую мыслимую и не очень анимацию. Например можно запустить полноэкранную Lottie анимацию, сделанную в Adobe after effects.

Приложения, настройки, информация