Анимация в мобильной разработке: что это, какие бывает и как использовать

Автор: IT Sectr Опубликовано: 2026-02-26 Время чтения: 10 мин

Анимация мобильных приложений делает их живыми и отзывчивыми, направляя внимание пользователя и улучшая восприятие интерфейса. В этой статье разберём основные виды анимаций в iOS и Android: Property Animation, View Animation, UIKit Dynamics, Core Animation, Lottie, Rive, Spring Animation, Hero Animation и Shared Element Transition. Материал поможет начинающим разработчикам понять, какие инструменты и библиотеки выбрать для конкретной задачи. Подробнее — в официальной документации Android Animations.

Главное

  • Property Animation (Android) изменяет реальные свойства объекта, View Animation — только визуальное отображение
  • Core Animation и UIView.animate (iOS) предоставляют встроенные возможности для анимации слоёв и view
  • Lottie и Rive позволяют встраивать сложную векторную анимацию из After Effects и Rive Editor
  • Hero Animation (Shared Element Transition) создаёт плавные переходы между экранами
  • Spring Animation с физикой пружины и Easing (Interpolator) делают анимацию естественной

Анимация в Android: Property Animation и View Animation

Android предоставляет две основные системы анимации: View Animation (устаревшая) и Property Animation (современная). View Animation (или Tween Animation) работает только с визуальным представлением — она меняет отображение View, но не его фактические свойства (например, координаты кликов остаются на месте). Property Animation, представленная в Android 3.0, изменяет реальные свойства объекта через Animator — ValueAnimator, ObjectAnimator или AnimatorSet.

ObjectAnimator и ValueAnimator

ObjectAnimator — самый популярный класс Property Animation. Он анимирует конкретное свойство объекта (например, translationX, alpha, scaleY) за указанное время с заданным Interpolator.

kotlin
ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f).apply {
    duration = 500
    interpolator = FastOutSlowInInterpolator()
    startDelay = 200
}.start()

ValueAnimator не привязан к конкретному объекту — он генерирует значения, которые можно использовать для любого свойства или кастомной логики.

View Animation и XML-анимации

View Animation описывается в XML-файлах res/anim/. Поддерживаются четыре типа: scale, translate, rotate, alpha. Недостаток — анимация не меняет реальные параметры View. Для простых эффектов (моргание, вращение) View Animation всё ещё применима, но для новых проектов рекомендуется Property Animation.

Анимация в Jetpack Compose

Jetpack Compose предлагает современный API анимации: animateAsState, Animatable, AnimatedVisibility и AnimatedContent. Анимация в Compose реактивна: при изменении состояния анимация запускается автоматически.

kotlin
var expanded = remember { mutableStateOf(false) }
val size = animateAsState(
    if (expanded) 200f else 50f
)
Box(
    modifier = Modifier
        .size(size.value, size.value)
        .clickable { expanded = !expanded }
        .background(Color.Blue)
)

Анимация в iOS: Core Animation и UIView.animate

iOS предоставляет мощный стек анимации на основе Core Animation — низкоуровневого фреймворка, работающего с CALayer. UIKit надстраивает над Core Animation удобные методы UIView.animate и UIViewPropertyAnimator.

UIView.animate

UIView.animate — самый простой способ анимации в iOS. Позволяет анимировать frame, alpha, transform, backgroundColor и другие свойства UIView.

swift
UIView.animate(
    withDuration: 0.5,
    delay: 0.2,
    usingSpringWithDamping: 0.6,
    initialSpringVelocity: 1.0,
    options: [.curveEaseInOut]
) {
    myView.frame.origin.x += 300
    myView.alpha = 0.5
}

UIKit Dynamics

UIKit Dynamics — фреймворк для физической анимации: гравитация, столкновения, пружины, силы притяжения. Позволяет создавать реалистичное поведение объектов без ручного расчёта физики. Используется для кастомных переходов, анимированных меню и игровых элементов.

CAAnimation и Core Animation

Core Animation (CAAnimation, CABasicAnimation, CAKeyframeAnimation) — низкоуровневый API для анимации CALayer. Поддерживает трёхмерные трансформации, анимацию пути (keyframe), маскирование и композицию. SwiftUI использует Core Animation под капотом через модификаторы animation и withAnimation.

swift
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
animation.repeatCount = .infinity
myLayer.add(animation, forKey: "rotation")

Для большего числа проектов на iOS используется SwiftUI с его встроенной анимацией. Например, withAnimation блокируют изменения состояния в анимированный контекст.

Векторная анимация: Lottie и Rive

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

Lottie

Lottie — библиотека от Airbnb (ныне LottieFiles), которая отрисовывает анимации из Adobe After Effects, экспортированные в JSON-формат. Поддерживается на Android, iOS, Flutter, React Native и Web. Lottie-анимации векторные, масштабируются без потери качества и могут настраиваться программно (скорость, прогресс, цвета).

kotlin
// Android
import com.airbnb.lottie.LottieAnimationView
val lottieView = findViewById<LottieAnimationView>(R.id.lottieView)
lottieView.setAnimation(R.raw.loading_animation)
lottieView.playAnimation()

Rive

Rive (ранее 2Dimensions) — более продвинутый инструмент для векторной анимации. В отличие от Lottie, Rive поддерживает интерактивную анимацию: состояния, триггеры, переходы. Анимация создаётся в Rive Editor, а в приложении управляется через State Machine. Rive подходит для игровых интерфейсов, анимированных иконок и сложных переходов с обратной связью.

В IT Sectr мы используем Lottie для декоративных анимаций (загрузчики, успешные операции, пустые состояния) и Rive — для интерактивных элементов onboarding-экранов. Это сокращает время разработки анимаций на 60% по сравнению с ручной реализацией на UIKit или Canvas.

Shared Element Transition и Hero Animation

Shared Element Transition — анимация, при которой элемент (изображение, текст, карточка) плавно перемещается и трансформируется при переходе между экранами. Это создаёт иллюзию непрерывности: пользователь не «переходит» на новый экран, а «проваливается» в элемент.

Android Shared Element Transition

В Android переход реализуется через ActivityOptionsCompat и атрибуты transitionName. FragmentTransaction поддерживает addSharedElement для переходов внутри Activity. Compose использует SharedTransitionLayout с SharedContentState.

iOS Hero Transition

В iOS нет встроенного Hero Transition, но библиотека Hero (от Luke Zhao) реализует этот паттерн на UIKit. Просто присвойте id элементам на обоих экранах — Hero автоматически создаст плавный переход. В SwiftUI анимация переходов встроена через NavigationStack и matchedGeometryEffect.

Flutter Hero

Flutter имеет встроенный виджет Hero с параметром tag. Когда две страницы содержат Hero с одинаковым tag, Flutter автоматически анимирует переход между ними. Это один из самых простых способов реализации сложной анимации в мобильном приложении.

dart
Hero(
    tag: 'profile_avatar',
    child: CircleAvatar(
        backgroundImage: AssetImage('avatar.jpg'),
        radius: 50,
    ),
)

Spring Animation, Interpolator и Easing

Чтобы анимация выглядела естественно, используются кривые скорости — Interpolator в Android и Easing в iOS. Они определяют, как изменяется скорость анимации от начала до конца.

Android Interpolators

Android поддерживает несколько встроенных Interpolator: LinearInterpolator (равномерно), AccelerateDecelerateInterpolator (медленно-быстро-медленно), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (с перелётом) и BounceInterpolator (с отскоком). Кастомный Interpolator можно создать через XML или класс TimeInterpolator.

Interpolator Поведение Применение
LinearInterpolatorПостоянная скоростьИндикаторы загрузки, бесконечные вращения
FastOutSlowInInterpolatorБыстрое начало, плавное завершениеMaterial Design, появление карточек
OvershootInterpolatorПерелёт цели и возвратАкцентные элементы, кнопки
BounceInterpolatorОтскок в концеСписки, pull-to-refresh

Spring Animation

Spring Animation (пружинная анимация) моделирует физику пружины с параметрами damping (затухание) и stiffness (жёсткость). Damping 0 — бесконечные колебания, 1 — без колебаний. Stiffness определяет скорость возврата. Spring Animation доступна в iOS (UIViewPropertyAnimator с UISpringTimingParameters), Android (SpringAnimation из physics2) и SwiftUI (spring()).

Документация Spring Animation в Android содержит подробные примеры настройки.

Timeline-анимация

Timeline (временная шкала) — подход, при котором анимация разбивается на кадры во времени. Используется для сложных последовательностей, где AnimationSet или Group-анимация недостаточно гибки. Android поддерживает AnimatorSet, iOS — CAAnimationGroup, Flutter — Interval в AnimationController.

Часто задаваемые вопросы

Чем отличается Property Animation от View Animation?

View Animation (Android) меняет только визуальное отображение View без изменения реальных свойств (позиция кликов не меняется). Property Animation изменяет фактические свойства объекта, что даёт более гибкое и предсказуемое поведение. Для новых проектов всегда используйте Property Animation.

Что такое Hero Animation?

Hero Animation — анимация, при которой элемент плавно перемещается и трансформируется при переходе между экранами, создавая иллюзию непрерывности. Реализуется через Hero (Flutter), SharedElementTransition (Android) или matchedGeometryEffect (SwiftUI).

Зачем нужны Lottie и Rive?

Lottie и Rive — библиотеки для отрисовки векторной анимации в рантайме. Дизайнер создаёт анимацию в After Effects (Lottie) или Rive Editor, экспортирует в JSON, а разработчик встраивает её без написания кода анимации вручную.

Что такое Spring Animation и чем она полезна?

Spring Animation моделирует физику пружины: анимация имеет естественное затухание и «отскок». SwiftUI и Jetpack Compose поддерживают spring-анимации из коробки, что делает интерфейс более живым и отзывчивым.

Как выбрать правильный Interpolator?

Выбор зависит от контекста: FastOutSlowIn — для появления элементов, Overshoot — для акцентов, Linear — для индикаторов загрузки, Bounce — для списков. Material Design рекомендует стандартные кривые: standard easing, deceleration easing и acceleration easing.

Итоги

  • Property Animation (Android ObjectAnimator) — современный стандарт, заменяющий View Animation
  • iOS использует UIView.animate и Core Animation для управления анимацией на уровне слоёв
  • Lottie и Rive упрощают внедрение сложной векторной анимации из дизайн-инструментов
  • Hero Animation (Shared Element Transition) улучшает восприятие навигации между экранами
  • Spring Animation и правильный выбор Interpolator / Easing делают анимацию естественной
  • Flutter предоставляет встроенный виджет Hero для переходов и AnimationController для кастомной анимации
  • Jetpack Compose и SwiftUI имеют встроенную реактивную анимацию через animateAsState и withAnimation

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект