Rive: bu nima, Flutter va iOS uchun animatsiya vositasi

Muallif: IT Sectr Nashr etilgan: 2026-03-01 O'qish vaqti: 11 daq

Rive — mobil platformalar uchun animatsiya muharriri va ish vaqti kutubxonalarini birlashtirgan interaktiv vektor animatsiyasini yaratish va ijro etish vositasidir. Passiv formatlardan farqli o'laroq, Rive State Machine — foydalanuvchi harakatlariga qarab animatsiyalar o'rtasida o'tish mantig'ini qo'llab-quvvatlaydi. Rive Blog (2026) ma'lumotiga ko'ra, vosita Duolingo va Bumble kabi 10 000 dan ortiq loyihalarda qo'llaniladi. Animatsiyaning boshqa turlari haqida animatsiya bo'yicha umumiy qo'llanmada o'qing.

Asosiy fikrlar

  • Rive — o'z muharririga ega interaktiv vektor animatsiyasi vositasi.
  • State Machine — triggerlar orqali animatsiyalar o'rtasida o'tishlarning vizual mantig'i.
  • RiveRuntime — iOS, Android, Flutter va Web uchun ijro kutubxonasi.
  • RiveAnimation — .riv fayllarini ilovaga joylashtirish uchun Flutter Dart vidjeti.
  • .riv formati — animatsiya va State Machine ni o'z ichiga olgan ikkilik konteyner.

Rive nima?

Rive (avval Rive.app, 2016-da tashkil etilgan) — interaktiv vektor animatsiyasi uchun grafik muharrir va ko'p platformali ish vaqti muhitidir. After Effects + Bodymovin (Lottie) dan farqli o'laroq, Rive yagona muhitni taqdim etadi: dizayner to'g'ridan-to'g'ri muharrirda chizadi, animatsiya qiladi va o'tish mantig'ini sozlaydi. Natija murakkabligiga qarab 2 dan 50 KB gacha bo'lgan .riv ikkilik fayliga eksport qilinadi.

Rive ning boshqa yechimlardan asosiy farqi — State Machine. Bu vizual graf bo'lib, tugunlar animatsiyalar (Idle, Hover, Press, Active) va ular orasidagi o'tishlar triggerlar (Touch, Drag, Boolean) orqali faollashtiriladi. Dasturchi koddan faqat triggerlarni yuboradi, RiveRuntime esa qaysi animatsiyani ijro etish va ular orasida qanday silliq o'tishni o'zi hal qiladi. Rive Engineering (2026) ma'lumotiga ko'ra, State Machine bilan o'rtacha .riv animatsiyasi 15 KB ni egallaydi — ekvivalent video fayldan 5–10 marta kam.

Rive Runtime Flutter, iOS (Swift), Android (Kotlin/Java), Web (WASM) va React uchun mavjud. Renderlash Skia (Flutter/Web), Core Graphics (iOS) yoki Canvas (Android) orqali amalga oshiriladi. Rive shakllar animatsiyasini (Knob, Slider, maxsus geometriyali Button) qo'llab-quvvatlaydi, bu shunchaki dekorativ animatsiyalarni emas, balki to'liq animatsiyalangan UI komponentlarini yaratishga imkon beradi.

Rive vs Lottie: yondashuvlarni solishtirish

Rive va Lottie turli vazifalarni hal qiladi. Lottie — passiv dekorativ effektlar uchun optimal bo'lgan After Effects dan tayyor animatsiyalar uchun pleyer. Rive — animatsiya foydalanuvchi harakatlariga reaksiya beradigan o'z mantig'iga ega interaktiv animatsiyalar yaratish vositasidir. Tanlov talab qilinadigan interaktivlik darajasiga bog'liq.

MezonRiveLottie
MuharrirO'z (Rive Editor)Adobe After Effects + Bodymovin
InteraktivlikState Machine, triggerlar, Boolean, NumberFaqat play/pause/seek
Format.riv (ikkilik).json yoki .lottie (protobuf)
RenderlashSkia / Core Graphics / CanvasCanvas / Core Animation / Skia
Animatsiyalangan UIKnob, Slider, Button, Input (ichki)Yo'q (faqat dekorativ qatlamlar)

Qachon Rive tanlash: bosishga reaksiya beradigan interaktiv tugmalar, o'yin elementlari (holatli personajlar), animatsiyali kalitlar, holatga reaksiya beradigan dinamik belgilar. Qachon Lottie tanlash: preloaderlar, like'lar, xush kelibsiz ekranlari, mantiqsiz urg'u animatsiyalari. Flutter loyihalari uchun Rive — Skia va Flutter renderlash quvuri bilan native integratsiya tufayli afzal tanlovdir.

Rive-ni Flutter-ga integratsiyalash (Dart)

Flutter-da RiveAnimation — .riv fayllarini joylashtirish uchun asosiy vidjetdir. rive paketi (rasmiy) orqali mavjud. RiveAnimation argumentlarni qo'llab-quvvatlaydi: artboard (taxta tanlash), animation (animatsiya nomi), fit, alignment, controllers (State Machine uchun). Interaktiv sahnalar uchun StateMachineController ishlatiladi.

dart
import 'package:rive/rive.dart';

// Animatsiyani oddiy ijro etish
RiveAnimation.asset(
  'assets/animations/button.riv',
  artboard: 'Button',
  animations: const ['idle'],
  fit: BoxFit.contain,
)

// StateMachineController triggerlar bilan
class InteractiveButton extends StatefulWidget {
  @override
  State<InteractiveButton> createState() => _InteractiveButtonState();
}

class _InteractiveButtonState extends State<InteractiveButton> {
  StateMachineController? _controller;
  SMIInput<bool>? _isPressed;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTapDown: (_) => _isPressed?.value = true,
      onTapUp: (_) => _isPressed?.value = false,
      child: RiveAnimation.asset(
        'assets/animations/button.riv',
        fit: BoxFit.contain,
        onInit: (artboard) {
          _controller = StateMachineController.fromArtboard(
            artboard, 'State Machine 1',
          );
          if (_controller != null) {
            artboard.addController(_controller!);
            _isPressed = _controller!.findInput<bool>('isPressed');
          }
        },
      ),
    );
  }
}

Flutter eng yaxshi amaliyotlari: .riv fayllarini RiveAnimation.asset (ichki AssetBundle) orqali asinxron yuklang. ListView uchun elementlar o'rtasida taqsimlangan bitta StateMachineController dan foydalaning. Rive endi alohida import talab qilmaydi — rive v0.12+ barcha funksiyalarni o'z ichiga oladi. Maxsus animatsiya uchun RiveAnimationController ni to'g'ridan-to'g'ri boshqaring — u animatsiyalar, aralashtirish (blend) va tezlikka kirishni ta'minlaydi.

Rive-ni iOS-ga integratsiyalash (Swift)

iOS da RiveRuntime RiveView (UIKit) va RiveViewModel (SwiftUI) sinflari bilan ifodalanadi. Kutubxona Swift Package Manager orqali ulanadi. RiveView .riv fayllarini Core Graphics va Metal orqali renderlaydi, ProMotion displeylarida 120 FPS qo'llab-quvvatlaydi. State Machine uchun triggerlarga bog'langan RiveStateMachineLayer ishlatiladi.

swift
import RiveRuntime

// SwiftUI: RiveViewModel animatsiya bilan
struct RiveAnimationView: View {
    @State private var isPressed = false

    var body: some View {
        RiveViewModel(fileName: "button").view()
            .frame(width: 200, height: 60)
            .gesture(
                DragGesture(minimumDistance: 0)
                    .onChanged { _ in
                        if !isPressed {
                            isPressed = true
                            // State Machine orqali trigger
                        }
                    }
                    .onEnded { _ in
                        isPressed = false
                    }
            )
    }
}

// UIKit: RiveView qo'lda boshqaruv
let riveView = RiveView()
riveView.configure(fileName: "loading", extension: "riv")
riveView.fit = .contain
riveView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(riveView)

// State Machine boshqaruvi
riveView.triggerInput(named: "startAnimation")

iOS eng yaxshi amaliyotlari: SwiftUI uchun RiveViewModel dan foydalaning — u hayot aylanishini avtomatik boshqaradi. UIKit uchun hodisalarni kuzatish uchun RiveViewDelegate ga obuna bo'ling. Rive Core Graphics orqali renderlash tufayli iOS da Lottie dan kamroq CPU sarflaydi. NavigationView/UICollectionView dagi animatsiyalar uchun RiveFile.preload() orqali oldindan yuklashdan foydalaning.

Rive-ni Android-ga integratsiyalash (Kotlin)

Android da RiveAnimationView — .riv animatsiyalarini joylashtirish uchun asosiy View. app.rive:rive-android kutubxonasi Gradle orqali ulanadi. RiveAnimationView View dan meros oladi va Hardware Acceleration qo'llab-quvvatlashi bilan Canvas orqali renderlaydi. State Machine setTriggers va setInputs orqali boshqariladi.

kotlin
// build.gradle.kts
implementation("app.rive:rive-android:0.9.0")

// XML layout
<app.rive.RiveAnimationView
    android:id="@+id/riveView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:rive_file="@raw/mascot"
    app:rive_artboard="Mascot"
    app:rive_animation="idle" />

// Kotlin: State Machine boshqaruvi
import app.rive.riveandroid.RiveAnimationView
import app.rive.riveandroid.StateMachineInput

val riveView = findViewById<RiveAnimationView>(R.id.riveView)
riveView.post {
    riveView.setTriggers("hover") "> State Machine ga trigger yuborish
    riveView.setInput("speed", 1.5f)
    riveView.setInput("isActive", true)
    riveView.play()
}

// Animatsiya tugashini qayta ishlash
riveView.addListener(object : RiveAnimationView.RiveListener() {
    override fun onAnimationCompleted(animationName: String) {
        Log.d("Rive", "Animation $animationName completed")
    }
})

Android eng yaxshi amaliyotlari: .riv fayllarini res/raw (ichki resurslar) yoki assets (tarmoq orqali yuklash) orqali yuklang. RiveAnimationView hayot aylanishini avtomatik boshqaradi — onResume/onPause da qo'lda play/pause chaqirmang. RecyclerView dagi animatsiyalar uchun aylantirish vaqtida ijroni to'xtatish uchun setOnScrollListener dan foydalaning. Rive hujjatlariga (2026) ko'ra, 100 KB gacha .riv fayllari o'rta segment qurilmalarida 5–10 ms da tahlil qilinadi.

State Machine: Rive-da o'tish mantig'i

State Machine — Rive-ni passiv animatsiya formatlaridan ajratib turadigan asosiy xususiyatdir. Bu vizual graf bo'lib, uchlari holatlar (animatsiyalar) va qirralari triggerlar bilan faollashtiriladigan o'tishlardir. State Machine Rive Editor da yaratiladi: dizayner animatsiya tugunlarini qo'shadi, ularni chiziqlar bilan bog'laydi va triggerlarni (Touch, Boolean, Number) tayinlaydi. Dasturchiga faqat bu triggerlarni koddan yuborish qoladi.

dart
// Flutter: State Machine ustidan to'liq nazorat
import 'package:rive/rive.dart';

class RiveStateMachineWidget extends StatefulWidget {
  @override
  State<RiveStateMachineWidget> createState() => _RiveStateMachineWidgetState();
}

class _RiveStateMachineWidgetState extends State<RiveStateMachineWidget> {
  Artboard? _artboard;
  StateMachineController? _controller;
  SMIInput<bool>? _isHovered;
  SMIInput<double>? _progress;

  @override
  Widget build(BuildContext context) {
    return MouseRegion(
      onEnter: (_) => _isHovered?.value = true,
      onExit: (_) => _isHovered?.value = false,
      child: RiveAnimation.asset(
        'assets/interactive_icon.riv',
        onInit: (artboard) {
          _controller = StateMachineController.fromArtboard(
            artboard, 'State Machine 1',
          );
          artboard.addController(_controller!);
          _isHovered = _controller!.findInput<bool>('isHovered');
          _progress = _controller!.findInput<double>('progress');
        },
      ),
    );
  }
}

// Raqamli qiymatni yuborish
SMIInput<double> speedInput = controller.findInput('speed');
speedInput?.value = scrollPosition;

Trigger turlari: Boolean — kalit (true/false), Number — raqamli qiymat (0.0–1.0 yoki ixtiyoriy diapazon), Trigger — bir martalik impuls (tugma bosilishi). Rive Editor da o'tishlarning silliqlashtirishini (Transition Duration) sozlash mumkin — silliqlik uchun tavsiya etilgan qiymat 100–300 ms. Murakkab UI holatlari uchun ichki State Machine (Nested State Machines) dan foydalaning — animatsiyaning har bir qismi mustaqil boshqariladi. Rive State Machine barcha platformalarda .riv faylida o'zgarishsiz ishlaydi — o'tish mantig'i ilova kodida emas, balki faylda joylashgan.

Tez-tez so'raladigan savollar

Rive Lottie dan qanday farq qiladi?

Rive — State Machine, triggerlar va o'z muharriri bilan interaktiv animatsiya. Lottie — After Effects dan JSON animatsiyasining passiv ijrosi. Rive tugmalar, o'yinlar va foydalanuvchiga reaksiya beradigan UI elementlari uchun mos keladi. Lottie — dekorativ effektlar (preloaderlar, like'lar) uchun. Rive .riv formatidan, Lottie esa JSON yoki .lottie formatidan foydalanadi.

Rive dan State Machine siz foydalanish mumkinmi?

Ha. Rive State Machine siz oddiy animatsiya ijrosini qo'llab-quvvatlaydi — RiveAnimation.asset yoki RiveView da animationName ni belgilang. Bunday holda Rive Lottie kabi ishlaydi: aylanma yoki bir martalik animatsiya. State Machine — interaktivlik uchun ixtiyoriy qatlam. Faqat dekorativ animatsiya kerak bo'lgan loyihalar uchun State Machine ortiqcha.

Rive Android Jetpack Compose bilan mos keladimi?

Ha, AndroidView orqali RiveAnimationView ni Compose ga joylashtirish uchun. rive-android 0.9.0 dan boshlab, modifikatorlarni qo'llab-quvvatlaydigan RiveAnimation compose() Compose o'rami mavjud. State Machine boshqaruvi uchun remember { StateMachineHolder() } dan foydalaning. Rive shuningdek umumiy Compose ish vaqti muhiti orqali iOS da Compose Multiplatform ni qo'llab-quvvatlaydi.

Rive Flutter Web da ishlaydimi?

Ha, Rive Flutter Web ni Skia Wasm (CanvasKit) yoki HTML renderer orqali qo'llab-quvvatlaydi. Maksimal ishlash uchun CanvasKit tavsiya etiladi. Rive fayllari HTTP so'rovi (RiveAnimation.network) orqali yuklanadi yoki assets ga joylanadi. Rive bilan Flutter Web barcha zamonaviy brauzerlarda (Chrome 90+, Safari 15+, Firefox 90+) to'g'ri ishlaydi.

Mobil qurilmalarda Rive ishlashini qanday optimallashtirish mumkin?

Bir vaqtning o'zida faol qatlamlar sonini 20–30 bilan cheklang. Oddiy shakllar uchun Gradient o'rniga Flat shading dan foydalaning. Matnli animatsiyalar uchun System Text (Rive Editor dagi vektor matni emas) dan foydalaning. Personajlar uchun Bone animatsiyalari sonini minimallashtiring — UI elementlari uchun ular kerak emas. Eski qurilmalarda Android da riveView.enableDoubleBuffering = false bilan ikki karra buferlashni o'chiring.

Xulosa

  • Rive — 5+ platforma uchun o'z muharriri va ish vaqti muhitiga ega interaktiv vektor animatsiyasi.
  • State Machine — triggerlar (Touch, Boolean, Number) orqali animatsiyalar o'rtasida o'tishlarning ichki mantig'i.
  • RiveRuntime — Skia/Core Graphics orqali renderlash bilan Flutter, iOS, Android, Web va React uchun kutubxonalar.
  • .riv formati — 2–50 KB og'irlikdagi animatsiya va State Machine ni o'z ichiga olgan ikkilik konteyner.
  • RiveAnimation (Flutter), RiveViewModel (SwiftUI), RiveAnimationView (Android) — asosiy komponentlar.
  • Rive interaktiv UI elementlari uchun mos, Lottie passiv dekorativ animatsiyalar uchun.
  • Trigger turlari: Boolean (kalit), Number (raqam), Trigger (impuls). Tavsiya etilgan o'tish davomiyligi — 100–300 ms.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing