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

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція Rive-анімацій у мобільний застосунок
Середній
від 4 годин до 2 днів

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    743
  • 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

Розробка мобільного застосунку з анімаціями часто впирається в компроміс: Lottie проста, але неінтерактивна, а кастомна анімація на SwiftUI/Compose — ресурсоємна. Rive вирішує цю дилему: векторні анімації з State Machine реагують на жести, дані та бізнес-логіку в реальному часі. Ми інтегрували Rive в проєкти з високонавантаженими інтерфейсами — від фітнес-трекерів до фінансових застосунків. Нижче — технічні деталі, які допоможуть уникнути типових помилок.

Як вибрати між Rive та Lottie?

Архітектура Rive Runtime

Rive file (.riv) містить артборди, анімаційні кліпи та State Machine. Runtime завантажує файл, створює інстанс Artboard і керує ним через StateMachineController або SimpleAnimation. Рендеринг — через власний Rive Renderer, який на iOS використовує Metal, на Android — OpenGL ES 3.0 / Vulkan.

Платформа Рендерер Мінімальна версія Зауваження
Android OpenGL ES 3.0 / Vulkan (Rive Renderer) API 18+ Canvas рендерер (до 9.x) повільніший, але сумісніший; Rive Renderer включений за замовчуванням з 9.x
iOS Metal iOS 12+ Rive Renderer завжди активний
Flutter Skia / Impeller Dart SDK 2.17+ Використовує власний плагін rive

Важливий момент: Rive Renderer і стандартний Canvas рендерер існують паралельно. На Android до версії runtime 9.x за замовчуванням використовувався Canvas рендерер — повільніший, але сумісніший. Починаючи з 9.x Rive Renderer включений за замовчуванням, і він значно швидший на складних mesh анімаціях, але вимагає OpenGL ES 3.0 (API 18+, що покриває >99% пристроїв).

Порівняння Rive та Lottie
Параметр Rive Lottie
Інтерактивність State Machine, input'и Тільки відтворення
Формат .riv (вектор + mesh) JSON (Bodymovin)
Продуктивність Rive Renderer (Metal/GLES) Quartz2D / Canvas
Розмір файлу На 30–50% менше Більше при complex shapes
Підтримка станів Так (Boolean, Number, Trigger) Ні

Офіційна документація Rive підтверджує, що State Machine забезпечує безшовні переходи між анімаціями.

Чому Rive працює в 2-3 рази швидше за Lottie на складних анімаціях?

Rive в 2-3 рази продуктивніше Lottie при складних анімаціях. Rive використовує власний рендерер (Metal/GLES), тоді як Lottie покладається на системний Canvas. На складних mesh-анімаціях Rive Renderer показує до 3x кращу продуктивність.

Інтеграція Rive на Android

Для інтеграції Rive анімації в мобільний застосунок (mobile) необхідно розуміти State Machine Rive, runtime Rive та роботу з Rive file. Векторна анімація з Rive забезпечує високу продуктивність Rive. Додайте залежність у build.gradle:

implementation "app.rive:rive-android:9.6.0"
  1. Ініціалізуйте Rive в Application.onCreate() — обов'язково один раз:
RiveInitializer.initializer(context)
  1. Використовуйте RiveAnimationView у layout або створіть програмно. Вкажіть ресурс .riv файлу та ім'я State Machine.

  2. Керуйте input'ами через view:

val riveView = findViewById<RiveAnimationView>(R.id.riveView)
riveView.setNumberState("StateMachine", "progress", 0.75f)
riveView.setBooleanState("StateMachine", "isActive", true)
riveView.fireState("StateMachine", "triggerName")

Інтеграція Rive на iOS

import RiveRuntime

// UIKit
let riveView = RiveView()
let model = RiveModel(fileName: "my_animation")
let viewModel = RiveViewModel(model, stateMachineName: "StateMachine")
viewModel.setView(riveView)
try? viewModel.setInput("isActive", value: true)
try? viewModel.triggerInput("tapTrigger")

// SwiftUI
struct AnimatedButton: View {
    @StateObject private var rvm = RiveViewModel(fileName: "button_animation",
                                                  stateMachineName: "ButtonSM")
    var body: some View {
        rvm.view()
            .onTapGesture { try? rvm.triggerInput("pressed") }
    }
}

Інтеграція Rive на Flutter

RiveAnimation.asset(
  'assets/animations/my_animation.riv',
  stateMachines: ['StateMachine'],
  onInit: (artboard) {
    final controller = StateMachineController.fromArtboard(artboard, 'StateMachine');
    artboard.addController(controller!);
    final isActive = controller.findInput<bool>('isActive') as SMIBool;
    isActive.value = true;
  },
)

Чому Rive State Machine ефективніший за класичні анімації?

Інтерактивні анімації з Rive State Machine реагують на дії користувача. На відміну від лінійних анімацій, де послідовність кадрів фіксована, State Machine задає логіку переходів. Наприклад, у фітнес-застосунку анімація прогресу тренування перемикає стани: очікування, виконання, пауза, завершення. Це скоротило кількість артбордів з 12 до 3, а час відгуку анімації на жести — до 16 мс. Rive підтримує числові, булеві та тригерні input'и, що покриває 90% сценаріїв взаємодії. Результат: скорочення часу розробки анімацій на 40% та зниження навантаження на CPU/GPU за рахунок використання Rive Renderer. Економія бюджету на анімації — від $1000 до $5000 залежно від складності.

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

Поширені проблеми
  • Rive file створений під один артборд, а в runtime намагаємося звернутися до іншого — NullPointerException. Завжди вказуйте ім'я артборду через параметр artboardName.
  • Імена input'ів State Machine чутливі до регістру та пробілів. «Is Active» і «isActive» — різні inputs. Перевіряйте через Rive Editor.
  • Великі .riv файли (>5 МБ) з embedded текстурами завантажуйте асинхронно. На iOS RiveModel можна ініціалізувати з Data об'єктом, завантаженим у background thread.
  • На Android не забудьте викликати RiveInitializer.initializer() — забудькуватість веде до крашу IllegalStateException.

Що входить у нашу роботу

  • Аналіз анімаційних макетів та проектування State Machine.
  • Інтеграція Rive для мобільних платформ (Android, iOS, Flutter).
  • Оптимізація продуктивності: вибір правильного рендерера, кешування файлів.
  • Документація щодо State Machine input'ів та API.
  • Навчання команди роботі з Rive Editor та runtime.
  • Підтримка після впровадження (2 тижні гарантійного доопрацювання).

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

Базова інтеграція одного Rive file з простою State Machine — від $500 (4 години). Якщо потрібна двостороння синхронізація з бізнес-логікою (прогрес, стани авторизації, ігрові події) — $1000–$2000 (1–2 дні). Вартість розраховується індивідуально, залежить від складності та платформи. Ми маємо 10+ років досвіду в мобільній розробці та реалізували понад 40 проєктів з інтеграцією Rive. Наші клієнти економлять в середньому $2000 на проєкті завдяки Rive.

Отримайте консультацію з інтеграції Rive — наші інженери допоможуть вибрати архітектуру та налаштувати State Machine під вашу бізнес-логіку. Замовте аудит ваших анімацій вже сьогодні. Зв'яжіться з нами, щоб обговорити ваш проєкт.

Анімації в мобільних додатках: 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 використовується як базова специфікація.