FireMonkey-Animationseffekte

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu FireMonkey-Anwendungshandbuch


Animationen ändern Eigenschaftswerte während eines bestimmten Zeitraums. Sie können automatisch oder manuell und jeweils mit einer optionalen Verzögerung gestartet werden. Wenn die Animation für die definierte Zeitspanne ausgeführt wurde, kann sie angehalten, erneut gestartet oder rückwärts ausgeführt werden.

Arten von Animationen

Die bereitgestellten Unterklassen von TAnimation lassen sich in drei Kategorien unterteilen:

  • Interpolationen von einem Startwert zu einem Endwert:
    • TIntAnimation ändert Eigenschaften, die Integerwerte sind.
    • TFloatAnimation ändert Eigenschaften, die reelle Zahlen sind, wie Position (X-, Y- und Z-Achsen müssen separat angegeben werden), Drehung und Opazität.
    • TRectAnimation ändert die Position der vier Ränder einer TBounds-Eigenschaft.
    • TColorAnimation ändert eine String- oder Integer-Eigenschaft, die eine Farbe enthält, einschließlich derer vom Typ TAlphaColor (was eigentlich eine Kardinalzahl ist) durch Modifizieren der Rot-, Grün, Blau- und Alpha-Werte der Farbe.
    • TGradientAnimation ändert den Verlauf (Typ TGradient) durch Modifizieren der Farben aller Punkte, die den Verlauf definieren.
    • TBitmapAnimation-Übergänge von einem Start-Bitmap-Bild zu einem anderen durch Zeichnen des Endbildes (Typ TBitmap) mit zunehmender Opazität, was das Ausblenden des Bildes bewirkt.
  • Interpolationen durch eine Reihe von Werten (nicht nur von zwei): vom ersten zum zweiten, vom zweiten zum dritten usw.:
  • Schrittweises Durchlaufen einer Liste ohne Interpolation:
    • TBitmapListAnimation arbeitet wie eine zeitlich festgelegte Slideshow, wobei alle Bilder horizontal in einem einzigen Bitmap zusammengefasst werden. Mit einer schnellen Bildrate (kurze Dauer und/oder viele Bilder) entsteht der Eindruck eines Filmes.

Erstellen von Animationen

Animationen werden dem zu animierenden Objekt als untergeordnete Objekte hinzugefügt, genau wie beliebig andere Unterkomponenten. Dann wird die Eigenschaft PropertyName auf einen Eigenschaftspfad in der Punktnotation gesetzt, entsprechend der Verwendung von System.TypInfo-Funktionen wie GetPropInfo; z.B. "Opacity" und "Position.Y".

Im Objektinspektor werden häufig animierte Objekte mit einem Filmstreifen-Symbol gekennzeichnet. Durch Auswahl einer Animation aus dem Dropdown-Menü des Eigenschaftswertes wird automatisch die Eigenschaft PropertyName gesetzt. Für aus der Komponentenpalette hinzugefügte Animationsobjekte muss die Eigenschaft PropertyName manuell gesetzt werden.

TFmxObject stellt einige nützliche Methoden zum programmseitigen Erstellen von numerischen und Farbanimationen mit dem PropertyName und dem Endwert als erforderliche Argumente bereit. Diese Animationen beginnen immer mit dem aktuellen Wert, werden nicht in Schleifen ausgeführt und geben sich bei Beendigung selbst frei. Die numerischen Animationen können auch mit einer Verzögerung oder mit einer Wartezeit, bis der Haupt-Thread beendet ist, beginnen.

Starten und Anhalten

Wenn im Formular-Designer das Flag Enabled einer Animation auf True gesetzt ist, wird die Animation nach dem Laden automatisch gestartet. Das programmseitige Setzen dieses Flags auf True startet die Animation ebenso; wird das Flag auf False gesetzt, wird die Animation angehalten. Im Gegenzug wird durch Aufrufen von Start und Stop Enabled entsprechend gesetzt.

In TFloatAnimation überschreibt StartFromCurrent automatisch den StartValue mit dem aktuellen Eigenschaftswert, wenn die Animation gestartet wird (entweder durch Aufruf von Start oder wenn sie aktiviert (Enabled) ist). Es ergibt keinen Sinn, StartValue zu setzen, wenn StartFromCurrent True ist. Dies trifft auch für TIntAnimation vollständig zu.

Hinweis: Dies ist insbesondere für manuelle Schleifen oder für die Wiederverwendung von Animationsobjekten relevant. Wenn im vorherigen Durchlauf StartFromCurrent verwendet wurde und der nächste Durchlauf StartValue verwendet, dann muss StartFromCurrent auf False gesetzt werden.

Anhalten der Animation:

  • Durch Setzen von Pause auf True kann die Animation ab diesem Punkt fortgesetzt werden, wenn Pause zurück auf False gesetzt wird.
  • Durch den Aufruf von Stop wird an das Ende der Animation gesprungen. Die Eigenschaft wird auf den Endwert (StopValue, wenn Inverse False ist, StartValue, wenn Inverse True ist) gesetzt und OnFinish wird ausgelöst.
  • StopAtCurrent setzt die Eigenschaft nicht auf den Endwert, löst aber OnFinish trotzdem aus.

Auslöser für Animationen

Zusätzlich zum automatischen Starten mit Enabled und dem manuellen Aufruf von Start und Stop können Animationen durch Änderungen von Eigenschaften ausgelöst werden. Auslöser (Trigger) arbeiten nicht mit jeder beliebigen Eigenschaft, sondern nur mit denjenigen, die bei der internen Ereignisverarbeitung von Komponenten überprüft werden. Alle integrierten Auslöser überprüfen boolesche Eigenschaften. Per Konvention beginnen diese Eigenschaften mit "Is".

TControl und TControl3D stellen vier Auslöser für alle Steuerelemente und Formen bereit:

Weitere integrierte Auslöser:

Hinweis: Ein etwas abweichender Satz von Auslösern steht für andere, nicht animierte Bildeffekte zur Verfügung.

Animationen können auf Start gesetzt werden, wenn eine dieser Eigenschaftsänderungen programmseitig oder per Benutzeraktion erfolgt. Wenn die Auslösebedingung nicht mehr zutrifft, wird die Animation angehalten. Auslösebedingungen sind beschränkt auf Gleichheitsprüfungen, und wenn der Auslöser mehr als eine Bedingung enthält, müssen alle zu True ausgewertet werden, damit die Animation ausgelöst wird. Ein Auslöser wird als String mit einer oder mehreren durch Komma getrennten Auslösebedingungen ausgedrückt. Jede Auslösebedingung besteht aus dem Eigenschaftsnamen, einem Gleichheitszeichen und dem Auslösewert. Alle integrierten Auslöser sind boolesch, daher muss ihr Wert entweder "wahr" oder "falsch" sein. Zum Beispiel:

IsMouseOver=true;IsPressed=false

Auslösebedingungen werden in zwei Eigenschaften, Trigger und TriggerInverse, gespeichert. Wie die Namen schon vermuten lassen, startet die erste Eigenschaft einfach die Animation wie definiert, während die zweite das Inverse-Flag der Animation setzt. Wegen der Art wie Animationen rückwärts ausgeführt und sofort bei Beendigung angehalten werden, wenn die Bedingung nicht mehr zutrifft, sind manchmal – anstatt einer einzelnen Animation mit gegenteiligen Auslösebedingungen – zwei als Gegenstücke definierte Animationen, jede mit einem gegenteiligen Auslöser erforderlich.

Invertieren und Schleifen

Invertieren wird über das "Rückwärtslaufen" erzielt; es werden nicht die Start- und Endwerte vertauscht. Wenn Inverse und StartFromCurrent True sind, springt die Eigenschaft daher zuerst zu StopValue und führt dann die Animation rückwärts bis zu dem Wert aus, bei dem die Animation gestartet wurde: eigentlich "Anhalten bei aktuellem" (wie das boolesche StartAtCurrent, nicht die Prozedur StopAtCurrent).

Eine Animation kann wiederholt in Schleifen ausgeführt werden, entweder immer wieder in derselben Richtung oder mit AutoReverse vorwärts und rückwärts wie ein Pendel.

Benutzerdefinierte Animationen

Benutzerdefinierte Animationskomponenten können durch Ableitung einer Unterklasse von TAnimation und Implementieren von ProcessAnimation erstellt werden.

Siehe auch