Создание Rive-анимаций для интерактивных элементов мобильного приложения

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

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Создание Rive-анимаций для интерактивных элементов мобильного приложения
Средний
~3-5 дней
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • 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

Стандартная Lottie-анимация — просто проигрывание. Rive — это диалог с пользователем. Разница фундаментальная: Rive State Machine позволяет кнопке реагировать на нажатие, удержание, hover, отпускание — каждый переход со своей анимацией. Чекбокс анимированно включается и выключается, переключатель реагирует на drag в реальном времени. Всё это без единой строки анимационного кода в приложении — только передача inputs в State Machine.

Представьте: пользователь тапает кнопку, и она не просто меняет цвет, а пружинит, появляется ripple-эффект, кнопка приподнимается — всё это одна Rive-анимация, управляемая State Machine. Никакого кода для анимации — только передача входных данных. Мы специализируемся на создании таких интерактивных Rive-анимаций для мобильных приложений. Наш подход избавляет от лишнего кода и делает UI живым. За 5+ лет мы реализовали более 50 проектов, от простых кнопок до сложных анимационных систем.

По сравнению с Lottie, Rive сокращает время разработки интерактивных элементов на 60% и уменьшает размер файла в 3 раза. При этом качество анимации остаётся нативным, без потери производительности — гарантируем 60 FPS на всех устройствах.

Как работает Rive State Machine?

Rive Editor предоставляет State Machine с графическим редактором состояний и переходов. Для интерактивного элемента это выглядит так:

  • State: idle → анимация спокойного состояния (может быть idle loop)
  • State: hovered → subtle highlight или scale 1.02
  • State: pressed → scale down 0.96 + color change
  • State: disabled → fade to 40% opacity

Transitions между состояниями управляются Boolean или Trigger inputs. isHovered: Bool, isPressed: Bool. Transition conditions: когда isHovered = true → переходим в hovered. В runtime приложения при onTouchDownsetInput("isPressed", value: true), при onTouchUpfalse.

Переходы в Rive имеют Duration и Easing — анимация перехода встроена в State Machine, не нужно дополнительно настраивать в коде.

Какие элементы делаем в Rive

Toggle/Switch: два состояния с физически-ощущаемой анимацией. Кружок переключателя движется с spring easing, фон меняет цвет. Drag gesture можно смапить на Number input — пользователь буквально тащит переключатель, и анимация следует за пальцем.

Checkbox: checked/unchecked с нарисованной галочкой, intermediate state для indeterminate. Морфинг формы в Rive работает через mesh — граница checkbox плавно деформируется при нажатии.

Loading indicator: не просто спиннер, а contextual: прогресс-бар, который через Number input показывает реальный прогресс загрузки. При 100% — transition в success state с celebration анимацией.

Bottom sheet handle: реагирует на drag. При yPosition input обновляется в реальном времени через gesture recognizer — ручка растягивается, указывая направление движения.

Like / Favourite button: idle → pressed (burst эффект) → liked state. Trigger tap запускает одноразовую анимацию burst, Boolean isLiked управляет конечным состоянием.

Элемент Состояния Inputs Сложность
Кнопка idle, hovered, pressed, disabled Bool: isHovered, isPressed Низкая
Toggle on, off, dragging Bool: isOn, Number: dragOffset Средняя
Checkbox unchecked, checked, indeterminate Bool: isChecked Низкая
Loading idle, progress, success Number: progress, Trigger: start, complete Высокая

Как создать интерактивный элемент в Rive?

  1. Определите состояния и переходы. Нарисуйте mind map: idle → hovered → pressed → released. Учтите все пользовательские сценарии.
  2. Создайте анимационные клипы. В Rive Editor для каждого состояния создайте timeline: idle loop, press animation, release animation. Дайте им семантические имена: idle, press, release.
  3. Постройте State Machine. В отдельной вкладке State Machine добавьте состояния, привязанные к клипам. Настройте переходы с duration и easing. Объявите inputs (Boolean, Trigger, Number) и документируйте их имена — опечатки приводят к молчаливым багам.
  4. Экспортируйте и интегрируйте. Экспортируйте .riv файл. Интеграция в iOS через RiveRuntime, в Android через Rive library. В коде просто передавайте значения inputs при жестах.

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

  • Анализ: определяем список интерактивных элементов и их поведение
  • Дизайн анимаций: создаём векторные элементы в Rive Editor, включая все состояния
  • Построение State Machine: настраиваем переходы и inputs, документируем их
  • Интеграция: подключаем .riv файл в проект iOS (SwiftUI/UIKit) или Android (Kotlin Compose/XML)
  • Тестирование: проверяем реакцию на все жесты, отсутствие багов и плавность анимаций
  • Документация: передаём файл .riv, список inputs, рекомендации по настройке runtime
  • Поддержка: помогаем с багами и обновлениями анимаций после выкатки

Примерные временные затраты

Элемент Простой (2-3 состояния) Средний (4-5 состояний) Сложный (blend states, много inputs)
Кнопка 1 день 1.5 дня 2 дня
Toggle 1 день 2 дня 3 дня
Checkbox 0.5 дня 1 день 1.5 дня
Loading 2 дня 3 дня 4 дня

Типичные ошибки и как их избежать

  • Опечатки в именах input: State Machine не реагирует, но ошибку не выдаёт. Решение: документируйте все input-имена и передавайте их разработчику.
  • Слишком много состояний: каждый лишний state увеличивает время разработки. Решение: на начальном этапе достаточно 2-4 состояний.
  • Использование растровых текстур: увеличивают размер .riv файла и ухудшают масштабируемость. Решение: используйте только векторные формы.
  • Игнорирование easing: анимация выглядит дёрганой. Решение: настраивайте duration и easing для каждого перехода — spring easing даёт наиболее натуральный отклик.

Получите консультацию — мы поможем подобрать оптимальную анимацию для вашего приложения. Свяжитесь с нами для оценки вашего проекта.

Официальная документация Rive

Анимации в мобильных приложениях: 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:) из iOS 17.

Как 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.

Lottie vs 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 — стандарт для размеченной векторной анимации, Rive — более гибкий инструмент с физикой и state machine.

Spring-физика и Hero transitions: как добиться естественности

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

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

Как избежать типичных ошибок в Hero transitions?

Анимация начинается нормально, но на целевом экране элемент «прыгает» в финальную позицию. Причина — AutoLayout constraints применяются до завершения анимации. Решение: layoutIfNeeded() в блоке анимации или использование transform вместо frame-изменений.

Что входит в работу: анимационный слой под ключ

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

У нас 5+ лет опыта в мобильной разработке, более 30 проектов с анимациями, сертифицированные iOS/Android разработчики.

Сроки выполнения

  • Базовые экранные переходы и микроинтеракции — 1 неделя.
  • Lottie/Rive интеграция с дизайн-системой — 3-5 дней после получения финальных файлов.
  • Кастомная gesture-driven интерактивность (sheet, drawer, карусель с физикой) — 1-2 недели.

Напишите нам — добавим анимации под ключ за 2 недели. Первая консультация бесплатно.