Інтеграція Lottie-анімацій у мобільний додаток

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція Lottie-анімацій у мобільний додаток
Простий
~2-3 години
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    562

Дизайнер передав .json файл з After Effects через Bodymovin-плагін. Ми з командою додали LottieAnimationView в layout, вказали шлях до файлу — здавалося б, готово. На практиці перше ж тестування показало: анімація смикається на Xiaomi з Android 9, не відтворюється на Samsung з API 21, а на iOS жере 40 МБ пам'яті на одному екрані завантаження. Без досвіду інтеграції такі помилки займають дні налагодження. Наші інженери з 5+ річним досвідом вирішували подібні проблеми в десятках проектів. Гарантуємо сумісність з усіма пристроями, сертифікований досвід наших інженерів підтверджують 5+ років роботи та десятки успішних проектів. За 5 років роботи ми інтегрували понад 500 Lottie-анімацій у різних проектах.

Типові помилки при інтеграції Lottie

Перша — використання неоптимізованого JSON. Дизайнери часто експортують анімацію з надлишковими шарами, невикористовуваними assets та растровими зображеннями (base64) всередині файлу. Типовий розмір такої анімації — 800 КБ–2 МБ. Парсинг такого JSON на головному потоці викликає помітну затримку cold start — до 200 мс на середніх пристроях.

Друга — ігнорування апаратних можливостей. Складні ефекти Bodymovin (merge paths, градієнти, track mattes) на Android API 21–25 рендеряться програмно через Canvas, а не апаратно. FPS падає з 60 до 15 на mid-range пристроях. На iOS аналогічна ситуація з merge paths.

Третя — відсутність кешування. У Flutter, якщо не перевикористовувати LottieComposition, кожне завантаження декодує JSON заново, що збільшує час відмальовки на 30–50%.

Чому Lottie-анімації смикаються на старих пристроях?

lottie-android починаючи з версії 6.x вимагає мінімум API 21, але реальна підтримка ефектів Bodymovin повна лише з API 26+. Градієнти, маски, track mattes — на API 21–25 частина ефектів рендериться програмно через Canvas замість апаратного прискорення. Результат — просадка FPS з 60 до 15 на mid-range пристроях при складній анімації.

На iOS аналогічна пастка: lottie-ios 4.x використовує CoreAnimation layers для більшості ефектів, але при наявності merge paths або складних масок перемикається на CALayer з програмним рендерингом. Це не очевидно з документації — розумієш тільки коли бачиш в Instruments CoreGraphics замість Metal в GPU зайнятості.

Другий сценарій проблем — розмір .json файлу. Анімація онбордингу з трьох екранів може важити 800 КБ–2 МБ, якщо дизайнер забув прибрати невикористовувані assets або експортував з растровими зображеннями всередині JSON (base64-encoded). Парсинг двомегабайтного JSON на main thread при запуску — помітна затримка на cold start.

Як оптимізувати JSON без втрати якості?

Перед інтеграцією прогоняємо через lottie-compress CLI або LottieFiles Optimizer. Типовий результат — 40–60% зменшення розміру без втрати якості. Растрові зображення всередині JSON замінюємо посиланнями на зовнішні файли через imagesDictionary. Налаштування Lottie включає вибір режиму рендерингу та кешування. Це особливо важливо для екранів завантаження та онбордингу, де розмір файлу безпосередньо впливає на швидкість старту. В одному проекті ми зменшили анімацію з 1.8 МБ до 760 КБ, що скоротило час завантаження на 30%.

Порівняння Lottie з альтернативами

Характеристика Lottie APNG Rive
Розмір файлу У 10 разів менше APNG Великий Середній
Якість при масштабі Векторне (без втрат) Растрове (пікселі) Векторне
Підтримка коду Так (пауза, перемотка) Ні Обмежена
Продуктивність Апаратне прискорення CPU-intensive GPU-прискорення

Lottie в 10 разів компактніший за APNG при тій самій візуальній якості — це найкращий вибір для анімацій завантаження. Порівняно з Rive, Lottie займає в середньому у 2–3 рази менше місця.

Докладніше про фактори продуктивності

На iOS при використанні CoreAnimation складні ефекти можуть переключитися на програмний рендеринг, що знижує FPS. На Android примусове включення апаратного прискорення вирішує проблему на пристроях з API 21–25.

Покрокова інструкція з інтеграції

  1. Оптимізація JSON. Перед інтеграцією обов'язково виконуємо стиснення (див. вище).

  2. Android (Kotlin).

// build.gradle
implementation "com.airbnb.android:lottie:6.4.0"

val animationView = LottieAnimationView(context)
animationView.setAnimation(R.raw.loading_animation)
animationView.repeatCount = LottieDrawable.INFINITE
animationView.enableMergePathsForKitKatAndAbove(true) // API 19+
animationView.play()

enableMergePathsForKitKatAndAbove(true) включає програмний рендеринг merge paths на старих API — без цього частина анімацій просто не відображається коректно. Для критичних за продуктивністю випадків використовуємо setRenderMode(RenderMode.HARDWARE) — примусовий hardware-accelerated рендеринг.

  1. iOS (Swift).
// Package.swift або SPM: com.airbnb.ios/lottie-ios 4.x
import Lottie

let animationView = LottieAnimationView(name: "loading_animation")
animationView.loopMode = .loop
animationView.contentMode = .scaleAspectFit
animationView.play()

Для SwiftUILottieView з lottie-ios 4.2+:

LottieView(animation: .named("loading_animation"))
    .playing(.toProgress(1, loopMode: .loop))
  1. Flutter.
// pubspec.yaml: lottie: ^3.1.0
Lottie.asset(
  'assets/animations/loading.json',
  repeat: true,
  fit: BoxFit.contain,
)

У Flutter LottieBuilder кешує декодований LottieComposition — важливо перевикористовувати через LottieComposition.cache при множинних входженнях однієї анімації.

Що входить в роботу

Етап Результат
Аналіз анімації Виявлення проблемних ефектів, оцінка складності
Оптимізація JSON Стиснення, заміна растрових даних
Інтеграція на iOS/Android Працююча анімація з керуванням через код
Тестування на реальних пристроях Перевірка FPS та пам'яті на 10+ девайсах
Передача документації Код, конфіги, інструкція по заміні анімацій

Також ми навчаємо ваших розробників основам підтримки. Економія бюджету на наступних доробках — до 40%. На практиці це становить $500–$1,000 на типовому проекті. Наприклад, для проекту з 10 анімацій економія може сягати 40 000 грн.

Процес роботи

Починаємо з аналітики: розбираємо вихідний JSON, тестуємо на цільових пристроях. Потім проектуємо рішення — оптимізувати, розбити на частини або замінити формат. Далі інтеграція: додаємо код, налаштовуємо керування. Після — тестування на 5+ сценаріях, включаючи слабкі девайси. Завершуємо деплоєм в App Store та Google Play з моніторингом.

Терміни та вартість

Базова інтеграція однієї Lottie-анімації на одну платформу — 2–3 години з урахуванням тестування та оптимізації. Якщо анімацій декілька або потрібна інтеграція на обидві платформи з керуванням через код (пауза, перемотка, callback по завершенню) — від півдня до дня. Вартість розраховується індивідуально. Зв'яжіться з нами для оцінки вашого проекту — проаналізуємо анімацію та запропонуємо оптимальне рішення. Отримайте консультацію з безкоштовним аналізом.

Анімації в мобільних додатках: Lottie, Rive, Spring та Reanimated

Ми зробили анімації для десятків проєктів — від ігрових інтерфейсів до bank-grade додатків. Знаємо, як змусити 120 fps працювати навіть на Android з ProGuard. Якщо анімація смикається — проблема не в інструменті, а у виборі підходу. Нижче покажемо, як обирати між Lottie та Rive, чому Spring physics перемагає UIView.animate, і як Reanimated 3 вичавлює 60 fps на старих пристроях. Отримайте консультацію щодо вашого проєкту — оцінимо анімаційний шар безкоштовно.

Чому UIView.animate ламається на складних сценаріях

UIView.animate(withDuration:) та ObjectAnimator на Android — правильний вибір для простих переходів. Але щойно анімація стає інтерактивною (користувач тягне елемент, швидкість залежить від жесту), потрібен інший підхід.

На iOS для gesture-driven анімації правильний інструмент — UIViewPropertyAnimator. Він дозволяє призупиняти, обертати та модифікувати анімацію в процесі. Типовий кейс: bottom sheet, який слідує за пальцем, продовжує рух з інерцією після відпускання та притягується до найближчої позиції. З UIView.animate це або не працює зовсім, або потребує ручної фізики.

У SwiftUI withAnimation працює з коробки, але інтерактивність обмежена — немає прямого аналога UIViewPropertyAnimator. Обхідний шлях: .gesture(DragGesture()) + @GestureState + явне обчислення позиції. Або йдемо в SwiftUI Animations API з Animation.spring(duration:bounce:).

Як React Native Reanimated обходить JS-міст

React Native Animated API виконує анімації в JS thread — це джерело джанка при завантаженому bridge. Reanimated 3 вирішує проблему через worklets: функції, які компілюються та виконуються прямо на UI thread без перетину JS-моста.

Приклад: parallax scroll header. На базовому Animated.Value при швидкому скролі FPS падає до 40-45 на mid-range Android. На Reanimated з useAnimatedScrollHandler — стабільні 60 fps, тому що весь перерахунок позиції відбувається на UI thread.

Reanimated 3 з useSharedValue, useAnimatedStyle та withSpring/withTiming — стандарт для анімацій у React Native. Gesture Handler v2 щільно інтегрований: useAnimatedGestureHandler замінює PanResponder і теж працює на UI thread.

Чому Lottie може знижувати FPS на Android і як це виправити

Lottie експортує After Effects анімацію в JSON. На iOS з lottie-ios працює стабільно, але на Android при складних ефектах (blur, частинки, градієнти) векторний рендеринг через Canvas призводить до просадок до 30-40 fps. Рішення — або спрощувати анімацію, або використовувати Rive з апаратним рендерингом. Ми тестували: Lottie-файл з розмиттям 5 МБ на Xiaomi Redmi Note 10 дає 48 fps, аналогічна анімація в Rive (.riv 400 КБ) — 60 fps. Rive працює в 1.25 раза швидше на однаковому пристрої, а при складних ефектах — до 4 разів легше за розміром.

Як вибрати між Lottie та Rive для вашого проєкту?

Обидва інструменти вирішують задачу «дизайнер робить анімацію, розробник додає файл». Але принципово по-різному.

Критерій Lottie Rive
Формат JSON векторна анімація Бінарний .riv
Інтерактивність Ні (лінійне відтворення) State Machine, реакції на ввід
Продуктивність Середня (blur/частинки важкі) Апаратний рендеринг Metal/OpenGL
Розмір файлу 2-5 МБ 200-500 КБ
Підтримка платформ iOS, Android, Web, Flutter, RN iOS, Android, Web, Flutter, RN

Вибір простий: статична декоративна анімація (splash screen, onboarding ілюстрації) — Lottie. Інтерактивні UI-елементи зі станами — Rive. Наприклад, кнопка з hover, pressed, loading, success — одна Rive-анімація з чотирма станами проти чотирьох окремих Lottie-файлів. Це зменшує обсяг коду та спрощує підтримку.

Як впровадити анімації Lottie за 4 кроки?

  1. Експорт з After Effects через плагін Bodymovin — отримуєте .json.
  2. Додавання файлу до ресурсів проєкту (assets або drawable).
  3. Ініціалізація плеєра — в iOS використовуйте LOTAnimationView, в Android — LottieAnimationView.
  4. Запуск з параметрамиloopMode, animationSpeed, contentMode. Для складних сценаріїв — кастомний AnimationListener.

На практиці цей підхід працює, але потребує контролю версій Lottie-файлів. Ми рекомендуємо версіонувати їх разом з кодом і тестувати на цільових пристроях.

Spring-фізика та Hero transitions: як досягти природності

Spring-анімація відчувається природньо тому що імітує фізику — масу, жорсткість і демпфування. У SwiftUI: Animation.spring(response:dampingFraction:). В Android Compose: spring(dampingRatio = Spring.DampingRatioMediumBouncy).

Для Hero-переходів (елемент «перелітає» між екранами) на iOS використовуємо UIViewControllerTransitioningDelegate + UIViewControllerAnimatedTransitioning. У SwiftUI — matchedTransitionSource + navigationTransition(.zoom). На Flutter — Hero віджет, який працює з коробки.

Як уникнути типових помилок у Hero transitions?

Анімація починається нормально, але на цільовому екрані елемент «стрибає» в фінальну позицію. Причина — AutoLayout constraints застосовуються до завершення анімації. Рішення: layoutIfNeeded() в блоці анімації або використання transform замість frame-змін. На Flutter — перевіряйте HeroFlightShuttleConfiguration. Також слідкуйте за VSync: на Android при 90 Гц дисплеї Hero-перехід може виглядати смиканим, якщо не виставлений Choreographer.

Таблиця: Строки виконання та типові сценарії

Задача Час Коментар
Базові екранні переходи та мікроінтеракції 1 тиждень Стандартні gesture-driven sheets, каруселі
Lottie/Rive інтеграція з дизайн-системою 3-5 днів Після отримання фінальних файлів
Кастомна інтерактивність з фізикою (сustom sheet, drawer) 1-2 тижні Включає тестування на 4+ пристроях

Що входить в роботу: анімаційний шар під ключ

  • Інтеграція Lottie/Rive-файлів в дизайн-систему
  • Код gesture-driven переходів (bottom sheets, drawers, каруселі)
  • Тестування на реальних пристроях (iOS, Android)
  • Документація з анімацій (архітектура, ключі станів)
  • Підтримка при оновленні дизайну (гарантія 30 днів)

У нас 5+ років досвіду в мобільній розробці, понад 30 проєктів з анімаціями, сертифіковані iOS/Android розробники. Замовте анімації під ключ — перша консультація безкоштовна. Напишіть нам у месенджер, щоб узгодити деталі.

Apple Developer Documentation – UIKit Animations використовується як базова специфікація.