Blog
UX
18. Januar 20269 min

Animierter KI-Nebel-Button in React Native mit Partikeln

Ein guter Button weckt den Wunsch, gedrückt zu werden. Der KI-Button von TAMSIV ist ein lebendiger Nebel, der zum Gespräch einlädt. Es ist nicht nur ein Kreis mit einem Mikrofon: Es sind 8 leuchtende Partikel, die tanzen, atmen und in Echtzeit auf jede Interaktion reagieren.

Dieser Button ist wahrscheinlich das Element der Benutzeroberfläche, für das ich pro Pixel die meiste Zeit aufgewendet habe. Nicht, weil er funktional am wichtigsten ist, sondern weil er der erste Kontaktpunkt zwischen dem Benutzer und der künstlichen Intelligenz ist. Wenn dieser Button nicht zum Sprechen anregt, ist alles andere nutzlos.

Kernpunkte
  • Der Nebel-Button verwendet 8 animierte Partikel über die native Animated API von React Native, ohne Lottie oder Skia, für die vollständige Kontrolle über jeden Frame.
  • 4 verschiedene Zustände (inaktiv, hören, verarbeiten, antworten) mit Übergängen in Animated.spring für eine organische Bewegung.
  • Garantierte Leistung von 60fps selbst auf Geräten mit 3 GB RAM dank useNativeDriver und null React-Re-Rendern.
  • Der Rhythmus im Ruhezustand imitiert eine ruhige Atmung (~4 Sekunden pro Zyklus) und erzeugt einen Effekt lebendiger Präsenz.
Ätherische leuchtende Kugel, die einem Nebel ähnelt und über einem Smartphone schwebt, wirbelnde blaue und violette Partikel

Warum so viel Zeit in einen einfachen Button investieren?

Die kurze Antwort: weil es der erste Kontakt mit der KI ist. Die lange Antwort beinhaltet Psychologie, Design und mobile Performance.

Laut Studien der Interaction Design Foundation bilden sich Benutzer innerhalb von 50 Millisekunden einen Eindruck von einer Benutzeroberfläche. Keine Zeit, ein Tutorial zu lesen. Keine Zeit, das Wertversprechen zu verstehen. 50 ms, um zu entscheiden, ob die App "professionell" oder "amateurhaft" ist.

Der KI-Button von TAMSIV ist das sichtbarste Element des Hauptbildschirms. Es ist die einzige Komponente, die sich bewegt, wenn alles andere statisch ist. Er muss drei Dinge ohne ein einziges Wort kommunizieren: "Ich bin da", "Ich bin bereit", "Sprich mit mir". Wenn du dem Benutzer erklären musst, wie man einen Button benutzt, ist das Design fehlgeschlagen.

Ich habe mehrere Wege erkundet, bevor ich zum Nebel kam. Ein einfacher pulsierender Kreis, zu generisch. Ein animiertes Mikrofon, zu wörtlich. Eine Schallwelle, zu technisch. Der Nebel entstand aus einer Beobachtung: Kosmische Wolken wirken lebendig, ohne bedrohlich zu sein. Sie ziehen den Blick an, ohne aggressiv zu wirken. Genau diese Emotion wollte ich für den KI-Button.

Wie funktioniert die technische Architektur des Nebel-Effekts?

Die wichtigste technische Entscheidung war, Abkürzungen abzulehnen. Kein Lottie (vorgerenderte Animationen), kein Skia (2D-Canvas). Vollständig auf der nativen Animated API von React Native. Warum? Weil die 4 Zustände des Buttons dynamisch miteinander verschmelzen müssen. Eine Lottie-Animation ist statisch: Sie spielt eine Datei von A bis Z ab. Der Nebel-Zustand muss in Echtzeit reagieren.

Die Architektur basiert auf 8 unscharfen Kreisen (blurRadius), die sich in Sinuswellen bewegen. Jeder Kreis hat drei unabhängige Parameter:

  • Position: Sinusförmige Bewegung in X und Y mit leicht unterschiedlichen Frequenzen, wodurch 8-förmige Trajektorien (Lissajous-Figuren) entstehen.
  • Opazität: Oszillation zwischen 0,3 und 0,8, um Bereiche variabler Lichtdichte zu erzeugen.
  • Skalierung: Subtile Variation zwischen 0,8 und 1,2, um Tiefe zu simulieren.

Die Mischung dieser 8 Kreise erzeugt Bereiche mit Lichtkonzentration, die auf natürliche Weise erscheinen und verschwinden, genau wie ein echter Nebel. Das Farbsystem bleibt zwischen dem TAMSIV-Akzentblau (#137fec) und einem sanften Violett, passend zum dunklen Thema der App (#101922).

Was sind die 4 Zustände des Buttons und wie wechseln sie?

Animiertes Partikelsystem auf einem Telefonbildschirm, das fließend sinusförmig bewegte leuchtende Kreise in Blau- und Violetttönen zeigt

Jeder Zustand ändert die Parameter der 8 Partikel schrittweise, niemals abrupt. Die Übergänge verwenden Animated.spring anstelle von Animated.timing für ein organisches Gefühl: Der Spring erzeugt einen leichten natürlichen Überschwinger, den das lineare Timing nicht reproduzieren kann.

Inaktiver Zustand: Die Atmung

Die Partikel bewegen sich langsam. Die Bewegungsamplitude ist gering. Die Helligkeit ist moderat. Der vollständige Zyklus dauert etwa 4 Sekunden, was dem ruhigen Atemrhythmus eines ruhenden Menschen entspricht. Das ist kein Zufall: Laut Studien von Respiratory Research beträgt der durchschnittliche Atemrhythmus im Ruhezustand 12-20 Zyklen pro Minute, also 3 bis 5 Sekunden pro Zyklus. Indem die Animation an diesen Rhythmus angepasst wird, aktiviert der Button unbewusst ein Gefühl von Ruhe und Vertrauen.

Hörzustand: Die Aufmerksamkeit

Der Benutzer drückt und spricht. Die Amplitude der Partikel erhöht sich um 50%. Die Helligkeit steigt. Die Partikel bewegen sich leicht vom Zentrum weg, als ob der Button "die Ohren spitzt". Der Übergang erfolgt als Spring mit hoher stiffness für eine sofortige Reaktion auf die Berührung.

Verarbeitungszustand: Die Konvergenz

Der Benutzer lässt los. Die KI verarbeitet die Anfrage. Die Partikel konvergieren zum Zentrum und die Rotation beschleunigt sich. Der visuelle Effekt erinnert an einen Wirbel, der die Informationen "verdaut". Dies ist ein entscheidendes Feedback: Der Benutzer weiß, dass seine Anfrage bearbeitet wird, ohne einen Spinner oder den Text "Laden..." zu benötigen.

Antwortzustand: Der Audio-Puls

Der TTS spielt die Antwort der KI ab. Die Partikel pulsieren synchron mit der Audioamplitude. Je höher die Lautstärke, desto größer die Amplitude der Partikel. Es ist dasselbe Prinzip wie bei den Audio-Visualizern von Spotify oder Apple Music, angepasst an einen Button von 60x60 Punkten. Ich hatte die komplette Audio-Pipeline im Artikel über die Sprach-Pipeline detailliert beschrieben.

Wie garantiert man 60fps auf Einsteigergeräten?

8 Partikel mit Position, Opazität und Skalierung zu animieren, das sind 24 gleichzeitige animierte Werte. Auf einem Flaggschiff ist das trivial. Auf einem Gerät mit 3 GB RAM und einem Snapdragon 400 Prozessor ist das eine ernsthafte Herausforderung.

Regel Nummer 1: useNativeDriver: true bei jeder Animation. Wenn der native Treiber aktiviert ist, wird die Animation vollständig vom nativen Thread (UI-Thread) verwaltet, nicht von der JavaScript-Bridge. Der JS-Thread ist frei, um die Geschäftslogik zu verwalten (Audioaufnahme, WebSocket-Versand, Parsing der KI-Antwort). Laut der React Native-Dokumentation kann der native Treiber die Animationsleistung im Durchschnitt um 60% verbessern.

Regel Nummer 2: null React-Re-Rendern. Die animierten Werte sind Animated.Value, die mutieren, ohne eine React-Reconciliation auszulösen. Die Komponente wird während der Animation niemals neu gerendert. Kein setState, keine Änderung animierter Props über den State.

Regel Nummer 3: Die animierten Eigenschaften sind ausschließlich transform (translateX, translateY, scale) und opacity. Diese Eigenschaften werden auf Android und iOS von der GPU beschleunigt. Keine animierten width/height/backgroundColor, die bei jedem Frame eine Neuberechnung des Layouts erfordern würden.

Ergebnis: konstante 60fps selbst auf getesteten Einsteigergeräten. Ich begann ursprünglich mit 16 Partikeln, bevor ich auf 8 reduzierte, ohne einen wahrnehmbaren visuellen Verlust. Dies ist ein klassischer Kompromiss in der mobilen Entwicklung, den ich auch im Sprachrekorder und der Inline-Oberfläche anwende.

Welche Rolle spielt die Psychologie der Bewegung im Design?

Person spricht in ein Smartphone, dessen KI-Button mit Licht pulsiert, sichtbare Schallwellen, moderner Innenraum im Hintergrund

Bewegung in der Benutzeroberfläche ist nicht dekorativ. Sie ist informativ. Jede Animation muss eine implizite Frage des Benutzers beantworten:

  • Inaktiver Zustand: "Ist die KI verfügbar?" Ja, schau, sie atmet. Sie wartet auf dich.
  • Hörzustand: "Hört sie mich?" Ja, schau, sie reagiert auf deine Stimme.
  • Verarbeitungszustand: "Wird meine Anfrage bearbeitet?" Ja, schau, sie arbeitet.
  • Antwortzustand: "Spricht die KI?" Ja, schau, sie pulsiert mit dem Audio.

Das Disney Animation Studio hat dieses Prinzip in seinen 12 grundlegenden Animationsprinzipien formalisiert. Zwei sind hier besonders relevant: "Antizipation" (der Button bereitet sich vor, bevor er handelt) und "Follow Through" (der Button reagiert nach der Aktion weiter).

Das erfreulichste Feedback der Tester war: "Es sieht so aus, als würde sie darauf warten, dass ich mit ihr spreche." Das ist kein Kompliment für die Animation. Es ist ein Kompliment für die Emotion. Die Animation hat es geschafft, ein Gefühl der Präsenz zu erzeugen. Und Präsenz ist das, was ein Werkzeug in einen Begleiter verwandelt. Ich hatte diese Philosophie im Artikel über die Sprachpersonalisierung erklärt: Die KI soll nicht nur nützlich, sondern auch angenehm sein.

Warum Lottie oder Rive nicht für diese Art von Animation verwenden?

Die Frage ist berechtigt. Lottie ist die Standardlösung für komplexe Animationen auf Mobilgeräten. Rive (ehemals Flare) ist sein leistungsfähigerer Konkurrent. Beide hätten einen beeindruckenden Nebel-Effekt erzeugen können. Aber mit einer kritischen Einschränkung: Die Animationen sind vorab berechnet.

Der KI-Button von TAMSIV hat dynamische Zustände, die von Echtzeitdaten abhängen. Der "Antwort"-Zustand synchronisiert die Amplitude der Partikel mit der Audiolautstärke des TTS. Diese Lautstärke ändert sich 60 Mal pro Sekunde. Eine Lottie-Animation kann sich nicht an einen Echtzeit-Audiostream anpassen: Sie spielt eine feste Sequenz ab.

Die native Animated API bietet Frame-für-Frame-Kontrolle. Ich kann jeden Parameter jederzeit ändern, ohne eine Animation neu laden zu müssen. Das ist mehr Programmieraufwand, aber das Ergebnis ist lebendiger. Es ist dieselbe Logik wie im Feed und der Gamifizierung: Datenreaktive Animationen sind immer ansprechender als statische Animationen.

Wie passt sich der Button an das Thema und die Farben der App an?

Der Nebel-Button existiert nicht isoliert. Er ist Teil eines kohärenten Designsystems mit dem dunklen Thema von TAMSIV: Hintergrund #101922, Akzent #137fec, Sekundärtext #9ca3af.

Die Partikel verwenden einen Farbverlauf zwischen dem Akzentblau und einem Violett (#8b5cf6). Diese Wahl ist nicht ästhetisch: Sie ist funktional. Blau ist die Akzentfarbe der gesamten Benutzeroberfläche, der Buttons, Links, Indikatoren. Violett wird nur für die KI verwendet. Diese farbliche Unterscheidung ermöglicht es dem Benutzer, Elemente, die mit künstlicher Intelligenz zusammenhängen, sofort zu identifizieren, ohne Text lesen zu müssen.

Auf dunklem Hintergrund erzeugen die leuchtenden Partikel einen natürlichen Kontrast, ohne Ränder oder Schatten zu benötigen. Dies ist ein Schlüsselprinzip des Dark Mode Designs: Licht wird zum Hervorhebungswerkzeug, nicht Linien. Ich habe dasselbe Prinzip bei der kontextuellen Suche mit Swipe und beim Onboarding mit Lazy Registration angewendet.

Häufig gestellte Fragen

Verbraucht der Nebel-Button viel Akku?

Nein. Die Animationen verwenden ausschließlich den nativen Treiber und GPU-beschleunigte Eigenschaften (Transform, Opazität). Der Akkuverbrauch ist vergleichbar mit einer Standard-CSS-Animation im Web. Die Partikel drehen sich nicht, wenn die App im Hintergrund ist.

Funktioniert der Effekt auf iOS und Android unterschiedlich?

Der visuelle Effekt ist auf beiden Plattformen identisch, dank der Animated API, die die Unterschiede abstrahiert. Die einzige Variation ist der Blur: iOS verwendet einen leistungsfähigeren nativen Blur, Android verwendet einen Workaround mit reduzierter Opazität, der ein visuell ähnliches Ergebnis liefert.

Kann man die Farben des Buttons anpassen?

Derzeit nicht. Die Farben sind an das Designsystem von TAMSIV gebunden. Eine themenbasierte Anpassung ist in Zukunft denkbar, würde aber eine Neugestaltung der KI-Palette für jede Farbvariation erfordern.

Warum 8 Partikel und nicht mehr?

Ich habe von 4 bis 16 Partikel getestet. Unter 6 verliert der Effekt an Reichhaltigkeit. Über 10 ist der visuelle Gewinn vernachlässigbar, aber die Leistungskosten steigen. 8 ist der Sweet Spot, getestet auf Geräten vom Samsung Galaxy A13 bis zum Pixel 8 Pro.

Ist der Button für sehbehinderte Benutzer zugänglich?

Ja. Die Komponente enthält ein beschreibendes accessibilityLabel und einen accessibilityHint, der den aktuellen Status anzeigt. Bildschirmleser kündigen je nach Zustand "KI-Button, bereit zum Zuhören" oder "KI-Button, Verarbeitung läuft" an.