Анімація мобільних додатків робить їх живими та чуйними, направляючи увагу користувача та покращуючи сприйняття інтерфейсу. У цій статті розберемо основні види анімацій в iOS та Android: Property Animation, View Animation, UIKit Dynamics, Core Animation, Lottie, Rive, Spring Animation, Hero Animation та Shared Element Transition. Матеріал допоможе початківцям розробникам зрозуміти, які інструменти та бібліотеки вибрати для конкретного завдання. Докладніше — в офіційній документації Android Animations.
Головне
Android надає дві основні системи анімації: View Animation (застаріла) та Property Animation (сучасна). View Animation (або Tween Animation) працює тільки з візуальним представленням — вона змінює відображення View, але не її фактичні властивості (наприклад, координати кліків залишаються на місці). Property Animation, представлена в Android 3.0, змінює реальні властивості об'єкта через Animator — ValueAnimator, ObjectAnimator або AnimatorSet.
ObjectAnimator — найпопулярніший клас Property Animation. Він анімує конкретну властивість об'єкта (наприклад, translationX, alpha, scaleY) за вказаний час із заданим Interpolator.
ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f).apply {
duration = 500
interpolator = FastOutSlowInInterpolator()
startDelay = 200
}.start()
ValueAnimator не прив'язаний до конкретного об'єкта — він генерує значення, які можна використовувати для будь-якої властивості або кастомної логіки.
View Animation описується в XML-файлах res/anim/. Підтримуються чотири типи: scale, translate, rotate, alpha. Недолік — анімація не змінює реальні параметри View. Для простих ефектів (моргання, обертання) View Animation все ще застосовна, але для нових проєктів рекомендується Property Animation.
Jetpack Compose пропонує сучасний API анімації: animateAsState, Animatable, AnimatedVisibility та AnimatedContent. Анімація в Compose є реактивною: при зміні стану анімація запускається автоматично.
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 — низькорівневого фреймворку, що працює з CALayer. UIKit надбудовує над Core Animation зручні методи UIView.animate та UIViewPropertyAnimator.
UIView.animate — найпростіший спосіб анімації в iOS. Дозволяє анімувати frame, alpha, transform, backgroundColor та інші властивості UIView.
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 — фреймворк для фізичної анімації: гравітація, зіткнення, пружини, сили притягання. Дозволяє створювати реалістичну поведінку об'єктів без ручного розрахунку фізики. Використовується для кастомних переходів, анімованих меню та ігрових елементів.
Core Animation (CAAnimation, CABasicAnimation, CAKeyframeAnimation) — низькорівневий API для анімації CALayer. Підтримує тривимірні трансформації, анімацію шляху (keyframe), маскування та композицію. SwiftUI використовує Core Animation під капотом через модифікатори animation та withAnimation.
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 — бібліотека від Airbnb (нині LottieFiles), яка відмальовує анімації з Adobe After Effects, експортовані в JSON-формат. Підтримується на Android, iOS, Flutter, React Native та Web. Lottie-анімації векторні, масштабуються без втрати якості та можуть налаштовуватися програмно (швидкість, прогрес, кольори).
// Android import com.airbnb.lottie.LottieAnimationView val lottieView = findViewById<LottieAnimationView>(R.id.lottieView) lottieView.setAnimation(R.raw.loading_animation) lottieView.playAnimation()
Rive (раніше 2Dimensions) — більш просунутий інструмент для векторної анімації. На відміну від Lottie, Rive підтримує інтерактивну анімацію: стани, тригери, переходи. Анімація створюється в Rive Editor, а в додатку керується через State Machine. Rive підходить для ігрових інтерфейсів, анімованих іконок та складних переходів зі зворотним зв'язком.
В IT Sectr ми використовуємо Lottie для декоративних анімацій (завантажувачі, успішні операції, порожні стани) та Rive — для інтерактивних елементів onboarding-екранів. Це скорочує час розробки анімацій на 60% порівняно з ручною реалізацією на UIKit або Canvas.
Shared Element Transition — анімація, при якій елемент (зображення, текст, картка) плавно переміщується та трансформується при переході між екранами. Це створює ілюзію безперервності: користувач не «переходить» на новий екран, а «провалюється» в елемент.
В Android перехід реалізується через ActivityOptionsCompat та атрибути transitionName. FragmentTransaction підтримує addSharedElement для переходів всередині Activity. Compose використовує SharedTransitionLayout з SharedContentState.
В iOS немає вбудованого Hero Transition, але бібліотека Hero (від Luke Zhao) реалізує цей патерн на UIKit. Просто призначте id елементам на обох екранах — Hero автоматично створить плавний перехід. В SwiftUI анімація переходів вбудована через NavigationStack та matchedGeometryEffect.
Flutter має вбудований віджет Hero з параметром tag. Коли дві сторінки містять Hero з однаковим tag, Flutter автоматично анімує перехід між ними. Це один з найпростіших способів реалізації складної анімації в мобільному додатку.
Hero( tag: 'profile_avatar', child: CircleAvatar( backgroundImage: AssetImage('avatar.jpg'), radius: 50, ), )
Щоб анімація виглядала природньо, використовуються криві швидкості — Interpolator в Android та Easing в iOS. Вони визначають, як змінюється швидкість анімації від початку до кінця.
Android підтримує кілька вбудованих Interpolator: LinearInterpolator (рівномірно), AccelerateDecelerateInterpolator (повільно-швидко-повільно), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (з перельотом) та BounceInterpolator (з відскоком). Кастомний Interpolator можна створити через XML або клас TimeInterpolator.
| Interpolator | Поведінка | Застосування |
|---|---|---|
| LinearInterpolator | Постійна швидкість | Індикатори завантаження, нескінченні обертання |
| FastOutSlowInInterpolator | Швидкий початок, плавне завершення | Material Design, поява карток |
| OvershootInterpolator | Переліт цілі та повернення | Акцентні елементи, кнопки |
| BounceInterpolator | Відскок в кінці | Списки, pull-to-refresh |
Spring Animation (пружинна анімація) моделює фізику пружини з параметрами damping (загасання) та stiffness (жорсткість). Damping 0 — нескінченні коливання, 1 — без коливань. Stiffness визначає швидкість повернення. Spring Animation доступна в iOS (UIViewPropertyAnimator з UISpringTimingParameters), Android (SpringAnimation з physics2) та SwiftUI (spring()).
Документація Spring Animation в Android містить докладні приклади налаштування.
Timeline (часова шкала) — підхід, при якому анімація розбивається на кадри в часі. Використовується для складних послідовностей, де AnimationSet або Group-анімація недостатньо гнучкі. Android підтримує AnimatorSet, iOS — CAAnimationGroup, Flutter — Interval в AnimationController.
Часто задаваемые вопросы
View Animation (Android) змінює тільки візуальне відображення View без зміни реальних властивостей (позиція кліків не змінюється). Property Animation змінює фактичні властивості об'єкта, що дає більш гнучку та передбачувану поведінку. Для нових проєктів завжди використовуйте Property Animation.
Hero Animation — анімація, при якій елемент плавно переміщується та трансформується при переході між екранами, створюючи ілюзію безперервності. Реалізується через Hero (Flutter), SharedElementTransition (Android) або matchedGeometryEffect (SwiftUI).
Lottie та Rive — бібліотеки для відтворення векторної анімації в рантаймі. Дизайнер створює анімацію в After Effects (Lottie) або Rive Editor, експортує в JSON, а розробник вбудовує її без написання коду анімації вручну.
Spring Animation моделює фізику пружини: анімація має природне загасання та «відскок». SwiftUI та Jetpack Compose підтримують spring-анімації з коробки, що робить інтерфейс більш живим та чуйним.
Вибір залежить від контексту: FastOutSlowIn — для появи елементів, Overshoot — для акцентів, Linear — для індикаторів завантаження, Bounce — для списків. Material Design рекомендує стандартні криві: standard easing, deceleration easing та acceleration easing.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.