Анимация в Android: переходы, ч. 1

Анимации в приложениях появились уже достаточно давно, и их красота, а вместе с ней и сложность, растут практически с каждым днём. Исходя из того, что анимация в привычном для человека понимании — это набор кадров, меняющихся с определенной задержкой, мы решили начать изучение анимаций в Android с самых азов.

Практическое применение

Для начала нужно включить отображение Transitions, либо в стилях:

либо в самой активити:

Далее необходимо задать эффекты (типы Transition). Опишу самые распространенные:

— ChangeBounds: отвечает за изменение координат и размеров элементов внутри лэйаута;

— Fade: плавное появление () или исчезновение () элемента;

— Slide: позволяет элементу «выезжать» (или «прибегать») из-за выбранного края;

— ChangeImageTransform: анимирует матричный переход изображения внутри ImageView. C помощью него можно плавно менять размер изображения и scaleType;

— ChangeClipBounds: анимирует изменение параметра clipBounds у элементов;

-AutoTransition: Set of effects changeBouns, , It’s used by default.

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

Я решил повторить эффект с рисунка 2 (ниже). В моем случае понадобились эффекты changeBounds и changeImageTransform.

Далее верстаем два лэйаута (layout). У view, которые будут подвергнуты анимации, необходимо задать параметр transitionName, он задается на обоих лэйаутах одинаковый, тем самым обозначаются начальная и конечная сцены.

После этого в следующее активити (activity) нужно передать какие-то данные, которые будут отображаться, а также параметры для воспроизведения анимации — ActivityOptions.

Читайте также:  Google Фото 5.31.0.359860651 для Андроид

{ startActivity(Intent(this, ImageActivity::).putExtra("photo", ), (this, iv1, "photo").toBundle()) }

Как можно увидеть из примера кода, в качестве параметров принимается transitionName и view.

Совсем забыл про эффекты. В ресурсах нужно добавить директорию transition, там создать transitionSet и прописать эффекты, которые вам нужны.

Далее возвращаемся в стили и прописываем transitionSet для анимации входа в активити и выхода из активити.

Конечно же, можно использовать разные наборы, я использовал одинаковые.

Самое время посмотреть, для чего всё это делалось.

Выглядит неплохо, при том, что мы вообще не думали про жизненный цикл активити. Пойдем дальше: провернем такой же эффект, только уже с холдером recyclerView. Всё абсолютно так же, как и в предыдущем случае: задаем одинаковый transitionName у элементов холдера и у элементов целевого активити (target activity / result activity).

Напишем простенький адаптер с колбэком (callback), который по клику на холдер (holder) будет возвращать какие-то данные для следующего активити, а также вью, которые участвуют в анимации. Так как в этом случае я задал 2 view для анимации, воспользуемся перегрузкой функции makeSceneTransitionAnimation, которая принимает в себя переменный массив элементов Pair<View, String>, соответственно, каждый такой элемент передает view и привязанный к нему TransitionName.

Запускаем…

Очень даже хорошо, а главное написания этой статьи я использовал информацию с поста на Habr: , оттуда же примеры анимаций в начале статьи.

Также изучил официальную документацию на портале разработчиков Google: -activity.

Спасибо за внимание!

Больше статей в нашем блоге:

BytePace — Блог BytePace — в темпе инноваций. Мобильные приложения для небольших, средних и крупных компаний — от…

Создание Activity на Kotlin

В Android Studio нажмите правой кнопкой мыши на имени вашего пакета и выберите New > Kotlin File.

Создание Activity на Kotlin

В диалоговом окне, введите имя новой Activity и выберите Class из выпадающего списка. Я назвал свой класс MainActivity.

Читайте также:  Как сделать резервную копию в IPhone и смартфоне на андроиде

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

Создание Activity на Kotlin

В алерте нажмте на ссылку и во всплывающем окне нажмите OK для выбора значений по умолчанию.

Для настройки поддержки Kotlin в вашем проекте, плагин Kotlin сделает некоторые изменения в файле . Примените изменения настроек нажатием на кнопку Sync Now сверху.

Создание Activity на Kotlin

На этом шаге настройка проекта завершена. Вернитесь к вашему Kotlin-классу для начала кодинга.

Создание виджета Label

Чтобы добавить текст в наш предыдущий пример, мы создадим lbl , с помощью класса Label, например:

Создание виджета Label

lbl = Label(window, text=«Привет»)

Затем мы установим позицию в окне с помощью функции grid и укажем ее следующим образом:

Создание виджета Label

lbl.grid(column=, row=)

Создание виджета Label

Полный код, будет выглядеть следующим образом:

from tkinter import * window = Tk() window.title(«Добро пожаловать в приложение PythonRu») lbl = Label(window, text=«Привет») lbl.grid(column=, row=) window.mainloop()

Создание виджета Label

И вот как будет выглядеть результат: Если функция grid не будет вызвана, текст не будет отображаться.

Настройка размера и шрифта текста

Создание виджета Label

Вы можете задать шрифт текста и размер. Также можно изменить стиль шрифта. Для этого передайте параметр font таким образом:

lbl = Label(window, text=«Привет», font=(«Arial Bold», 50))

Создание виджета Label

Обратите внимание, что параметр font может быть передан любому виджету, для того, чтобы поменять его шрифт, он применяется не только к Label.

Отлично, но стандартное окно слишком мало. Как насчет настройки размера окна?

Создание виджета Label

Выбор функции

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

Функция Обращение к объекту Возвращаемое значение Является функцией-расширением
let it Результат лямбды Да
run this Результат лямбды Да
run Результат лямбды Нет: может быть вызвана без контекстного объекта
with this Результат лямбды Нет: принимает контекстный объект в качестве аргумента.
apply this Контекстный объект Да
also it Контекстный объект Да

Краткое руководство по выбору функции области видимости в зависимости от предполагаемого назначения:

  • Выполнение лямбды для non-null объектов: let
  • Представление переменной в виде выражения со своей локальной областью видимости: let
  • Настройка объекта: apply
  • Настройка объекта и вычисление результата: run
  • Выполнение операций, для которых требуется выражение: run без расширения
  • Применение дополнительных значений: also
  • Группировка всех функций, вызываемых для объекта: with

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

Несмотря на то, что функции области видимости предназначены для того, чтобы сделать код более кратким, избегайте их чрезмерного использования: это может снизить читабельность кода и привести к ошибкам. Избегайте вложенности функций и будьте осторожны при их объединении: можно легко запутаться в текущем значении контекстного объекта и в значениях this или it.

Читайте также:  Как выбрать прикроватный столик для ноутбука?