Lottie-Animationen in React Native einbinden
AI generated
RN
native
React Native · Lottie · Animation
Lottie-Animationen einbinden
After-Effects-Qualität ohne Video oder GIF

Lottie bringt von Designern in After Effects gebaute Animationen als kompaktes JSON in die App und spielt sie nativ auf iOS und Android ab, ohne Video-Datei und ohne handgeschriebenen Animationscode. Dieser Artikel zeigt die JSON-Pipeline, die programmatische Steuerung über Play, Pause und dynamische Farben sowie die Grenzen von Lottie gegenüber selbst programmierten Reanimated-Animationen.

12 Min. Lesezeit lottie-react-native Play/Pause-Steuerung Dynamische Farben

1. Was ist Lottie und wie funktioniert die JSON-Pipeline?

Lottie ist ein von Airbnb entwickeltes Format und eine Rendering-Bibliothek, die Animationen aus Adobe After Effects als JSON-Datei exportiert und auf verschiedenen Plattformen nativ abspielt. Der Export läuft über das Plugin Bodymovin, das Ebenen, Formen, Pfade und Keyframes aus After Effects in eine deklarative JSON-Beschreibung übersetzt, die keine Rasterbilder enthält, sondern reine Vektordaten.

Auf React Native übernimmt lottie-react-native das Parsen und Rendern dieser JSON-Datei, indem es die nativen Lottie-Bibliotheken für iOS und Android unter der Haube einbindet. Die eigentliche Wiedergabe passiert dadurch nativ, vergleichbar mit einer Vektorgrafik, die bei jedem Frame neu interpoliert wird, nicht als abgespieltes Video oder animiertes GIF, was deutlich kleinere Dateigrößen und scharfe Darstellung auf jeder Bildschirmgröße ergibt.

2. Einrichtung: Installation und erste LottieView

Nach der Installation von lottie-react-native und dem nötigen nativen Linking lässt sich eine Animation entweder als lokale JSON-Datei über require() oder als entfernte URL einbinden. Für produktive Apps ist die lokale Variante meist vorzuziehen, weil sie keine Ladezeit und keine Abhängigkeit von Netzwerkverfügbarkeit mit sich bringt.

Die Komponente LottieView übernimmt dabei die komplette Wiedergabelogik: Größe, Wiederholung und Autostart lassen sich direkt über Props steuern, während feinere Kontrolle, etwa das gezielte Starten nach einem Nutzerereignis, über eine Ref und imperative Methoden erfolgt.


import LottieView from 'lottie-react-native';

function SuccessAnimation() {
  return (
    <LottieView
      source={require('./assets/success-check.json')}
      autoPlay
      loop={false}
      style={{ width: 160, height: 160 }}
    />
  );
}

3. Programmatische Steuerung: play, pause und Geschwindigkeit

Für Anwendungsfälle, in denen eine Animation gezielt zu einem bestimmten Zeitpunkt starten oder pausieren soll, etwa nach einem erfolgreichen Formular-Submit, wird eine Ref auf die LottieView gelegt. Darüber lassen sich play(), pause() und reset() imperativ aufrufen, wahlweise mit einem Start- und Endframe, um nur einen Ausschnitt der Animation abzuspielen.

Die Wiedergabegeschwindigkeit lässt sich über die speed-Prop anpassen, was sich in der Praxis eignet, um dieselbe Animationsdatei für unterschiedliche Kontexte wiederzuverwenden, etwa eine schnellere Version für ungeduldige Wiederholungsnutzer und eine langsamere für den ersten Onboarding-Moment.


function SubmitButton() {
  const animationRef = useRef<LottieView>(null);
  const [submitting, setSubmitting] = useState(false);

  async function handleSubmit() {
    setSubmitting(true);
    await submitForm();
    animationRef.current?.play(0, 60);
  }

  return (
    <LottieView
      ref={animationRef}
      source={require('./assets/success-check.json')}
      loop={false}
      autoPlay={false}
      onAnimationFinish={() => setSubmitting(false)}
    />
  );
}

4. Dynamische Farben ohne Bearbeitung der JSON-Datei

Eine häufige Anforderung ist, eine von Designern gelieferte Lottie-Animation an die aktuelle Markenfarbe oder ein Dark-Theme anzupassen, ohne für jede Variante eine eigene JSON-Datei zu pflegen. Über die colorFilters-Prop lassen sich einzelne benannte Ebenen der Animation zur Laufzeit umgefärbt, vorausgesetzt die Ebenen wurden in After Effects mit sprechenden Namen versehen.

Für komplexere Fälle bietet lottie-react-native zusätzlich eine Dynamic-Properties-API, mit der sich nicht nur Farben, sondern auch Position, Größe oder Deckkraft einzelner Ebenen zur Laufzeit überschreiben lassen, was Themes oder personalisierte Inhalte innerhalb derselben Animation ermöglicht.


<LottieView
  source={require('./assets/onboarding-illustration.json')}
  autoPlay
  loop
  colorFilters={[
    { keypath: 'Primary Shape', color: theme.colors.brandPrimary },
    { keypath: 'Accent Shape', color: theme.colors.brandAccent },
  ]}
/>

5. Interaktivität: Fortschritt an Scroll oder Geste koppeln

Über die progress-Prop lässt sich der Wiedergabefortschritt einer Lottie-Animation direkt setzen, statt sie automatisch abzuspielen. Damit lassen sich Animationen an Nutzerinteraktionen koppeln, etwa ein Pull-to-Refresh-Indikator, dessen Fortschritt proportional zur Zugdistanz gesetzt wird, oder eine Fortschrittsanzeige, die exakt zum Scrollstand eines Onboarding-Screens passt.

Wichtig ist dabei die Einschränkung, dass jede Aktualisierung von progress über den JS-Thread läuft, nicht über ein Worklet auf dem UI-Thread wie bei Reanimated. Bei sehr häufigen Updates, etwa bei jedem Pixel einer Scroll-Geste, kann das zu spürbaren Verzögerungen führen, weshalb in solchen Fällen eine Drosselung der Update-Frequenz sinnvoll ist.


const [progress, setProgress] = useState(0);

const scrollHandler = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
  const ratio = event.nativeEvent.contentOffset.y / MAX_SCROLL;
  setProgress(Math.min(Math.max(ratio, 0), 1));
};

<LottieView
  source={require('./assets/progress-indicator.json')}
  progress={progress}
/>

6. Performance-Eigenschaften und typische Bremsen

Lottie rendert nativ und ist für viele Alltagsanimationen performant genug, ohne dass Entwickler sich um Details kümmern müssen. Bei sehr komplexen Animationen mit vielen Ebenen, Masken oder Formen, die per Expression in After Effects berechnet wurden, kann die Wiedergabe auf älteren Geräten dennoch spürbar CPU-Last erzeugen, weil jede Ebene bei jedem Frame neu interpoliert werden muss.

In der Praxis hilft es, Animationen vor dem Export in After Effects zu vereinfachen: Formen zusammenfassen, unnötige Ebenen entfernen und Expressions durch feste Keyframes ersetzen, wo möglich. Das neuere dotLottie-Format bündelt zudem mehrere Animationen und Assets komprimiert in einer Datei und reduziert damit sowohl Bundle-Größe als auch Ladezeit gegenüber einzelnen JSON-Dateien.

7. Grenzen gegenüber selbst programmierten Reanimated-Animationen

Lottie eignet sich hervorragend für fest choreografierte, von Designern gestaltete Sequenzen wie Erfolgs-Checkmarks, Ladeanimationen oder Onboarding-Illustrationen, bei denen die Bewegung im Voraus feststeht. Sobald eine Animation aber dynamisch auf physikalische Eingaben reagieren soll, etwa eine Karte, die einer Fingerbewegung in Echtzeit folgt und dabei natürlich ausschwingt, stößt Lottie an seine Grenzen, weil die Wiedergabe an eine vorab aufgezeichnete Zeitachse gebunden bleibt.

Reanimated und Skia erlauben dagegen vollständig code-getriebene, worklet-basierte Animationen, die auf jeden beliebigen Eingabewert in Echtzeit reagieren können, ohne an eine feste Keyframe-Sequenz gebunden zu sein. Die pragmatische Faustregel lautet deshalb: Designer-authored, feste Sequenzen gehören zu Lottie, physikalisch reagierende oder datengetriebene Interaktionen gehören zu Reanimated oder Skia.

8. Die Asset-Pipeline in der Praxis: Fallstricke beim Export

Nicht jedes After-Effects-Feature wird von Lottie-Renderern unterstützt. Bestimmte Masken- und Matte-Typen, manche Expressions und einige Textlayer-Effekte werden vom Bodymovin-Export entweder ignoriert oder führen zu sichtbaren Abweichungen zwischen der Vorschau in After Effects und dem tatsächlichen Rendering in der App. Ein Test der exportierten Datei im LottieFiles-Preview vor der Integration erspart hier viel Zeit.

In der Zusammenarbeit mit einem Design-Team empfiehlt es sich, frühzeitig eine Liste unterstützter Features festzulegen und komplexe Effekte, die Lottie nicht abbilden kann, bewusst zu vermeiden, statt sie erst nach der Integration in der App als Bug zu entdecken.

9. Praxisbeispiel: ein Erfolgs-Checkmark nach Formular-Submit

Ein vollständiges Beispiel verbindet mehrere der zuvor gezeigten Bausteine: Die Animation startet erst nach erfolgreichem Server-Request, spielt einmalig ab und löst über onAnimationFinish die Weiterleitung zum nächsten Screen aus, ohne dass der Nutzer manuell weiterklicken muss.

Dieses Muster, Animation als Bestätigung eines abgeschlossenen Vorgangs statt als reines Dekorationselement, ist einer der häufigsten und zugleich nutzerfreundlichsten Einsatzzwecke von Lottie in produktiven Apps.


function SuccessScreen({ onDone }: { onDone: () => void }) {
  return (
    <LottieView
      source={require('./assets/success-check.json')}
      autoPlay
      loop={false}
      speed={1.2}
      onAnimationFinish={onDone}
      style={{ width: 200, height: 200, alignSelf: 'center' }}
    />
  );
}
Anwendungsfall Empfehlung Warum Alternative
Erfolgs-Checkmark nach Formular Lottie Fertig designte Sequenz, kein Custom-Code nötig Reanimated bei sehr einfachen Fällen
Physikalisch reagierende Geste Reanimated Direkte Worklet-Steuerung in Echtzeit nötig Keine sinnvolle Lottie-Alternative
Onboarding-Illustration Lottie Designer-Workflow über After Effects Statisches Bild bei geringem Budget
Datengetriebener Chart Skia oder Reanimated Lottie kann Struktur nicht dynamisch ändern Keine sinnvolle Lottie-Alternative
Pull-to-Refresh-Indikator Lottie mit progress-Steuerung Vorgefertigte Bewegung, an Scroll gekoppelt Reanimated für volle Kontrolle
Ladeindikator mit Markenfarbe Lottie mit colorFilters Eine Datei für mehrere Themes nutzbar Individuelle Reanimated-Lösung

Mironsoft

React-Native-App-Entwicklung und Magento-Anbindung

Eine mobile App zum Magento-Shop, die wirklich rund läuft?

Wir entwickeln React-Native-Apps, die sauber an die Magento REST- oder GraphQL-API angebunden sind, von der ersten Codezeile bis zur Veröffentlichung im App Store und bei Google Play.

App-Konzeption

Architektur und Feature-Umfang einer Magento-angebundenen App gemeinsam planen.

Magento-API-Integration

Produktkatalog, Warenkorb und Checkout sauber an die Shop-API anbinden.

Store-Veröffentlichung

App Store- und Google-Play-Freigabeprozess ohne Stolperfallen begleiten.

10. Zusammenfassung

Lottie in React Native

Kernidee

Lottie spielt von Designern in After Effects gebaute Animationen als kompaktes JSON nativ ab, ohne Video oder GIF.

Steuerung

Über eine Ref lassen sich play, pause, reset, speed und progress imperativ aufrufen.

Dynamische Farben

colorFilters färbt benannte Ebenen zur Laufzeit um, ohne die JSON-Datei zu bearbeiten.

Grenze

Fest choreografierte Sequenzen gehören zu Lottie, physikalisch reagierende Interaktionen zu Reanimated.

11. FAQ: Lottie in React Native

1Was ist der Unterschied zwischen Lottie und einem animierten GIF?
Ein GIF ist eine Folge von Rasterbildern mit begrenzter Farbtiefe und fester Auflösung, während Lottie Vektordaten enthält, die bei jeder Bildschirmgröße scharf gerendert werden und dabei deutlich kleinere Dateien erzeugen.
2Wie exportiere ich eine Lottie-Animation aus After Effects?
Über das kostenlose Bodymovin-Plugin, das die Ebenen, Formen und Keyframes einer After-Effects-Komposition in eine JSON-Datei übersetzt, die anschließend direkt in lottie-react-native geladen werden kann.
3Wie starte ich eine Lottie-Animation gezielt per Knopfdruck?
Über eine Ref auf die LottieView und den imperativen Aufruf von play(), optional mit Start- und Endframe, während autoPlay dafür auf false gesetzt bleibt.
4Kann ich die Farben einer Lottie-Animation zur Laufzeit ändern?
Ja, über die colorFilters-Prop lassen sich benannte Ebenen zur Laufzeit umfärben, vorausgesetzt die Ebenen wurden im Design-Tool mit eindeutigen Namen versehen.
5Warum ruckelt meine Lottie-Animation auf älteren Geräten?
Meist wegen zu vieler Ebenen, komplexer Masken oder Expressions aus After Effects, die bei jedem Frame neu berechnet werden müssen. Eine Vereinfachung der Animation vor dem Export hilft hier meist deutlich.
6Kann ich den Fortschritt einer Lottie-Animation an eine Scroll-Geste koppeln?
Ja, über die progress-Prop, die sich manuell setzen lässt. Bei sehr häufigen Updates empfiehlt sich eine Drosselung, weil jede Aktualisierung über den JS-Thread läuft und nicht wie bei Reanimated direkt auf dem UI-Thread.
7Was ist dotLottie und wann lohnt es sich?
dotLottie ist ein komprimiertes Containerformat, das mehrere Animationen und Assets in einer Datei bündelt und dadurch Bundle-Größe und Ladezeit gegenüber einzelnen JSON-Dateien reduziert, besonders bei Apps mit vielen Lottie-Animationen.
8Sollte ich Lottie oder Reanimated für eine Swipe-Geste mit Rückfeder-Effekt verwenden?
Reanimated, weil eine solche Geste in Echtzeit auf Fingerbewegungen reagieren muss. Lottie ist an eine vorab aufgezeichnete Zeitachse gebunden und eignet sich nicht für physikalisch reagierende Interaktionen.
9Werden alle After-Effects-Features von Lottie unterstützt?
Nein, bestimmte Masken-Typen, manche Expressions und einige Textlayer-Effekte werden von Lottie-Renderern nicht oder nur eingeschränkt unterstützt. Ein Test im LottieFiles-Preview vor der Integration deckt solche Abweichungen früh auf.
10Kann ich mit onAnimationFinish auf das Ende einer Animation reagieren?
Ja, der Callback onAnimationFinish wird ausgelöst, sobald die Wiedergabe abgeschlossen ist, und eignet sich gut, um danach automatisch zu navigieren oder einen State zurückzusetzen.