FireMonkey-Steuerelemente werden nicht reibungslos animiert

9

Hintergrund

Ich habe eine GUI mit einigen FireMonkey-Steuerelementen erstellt.

  • Einige Steuerelemente sind animiert und ihr Aussehen wird automatisch aktualisiert.
  • Einige Steuerelemente werden nur als Reaktion auf Benutzerinteraktionen (Schieberegler usw.) aktualisiert.

Problem

Die Interaktion mit den Benutzersteuerelementen verhindert Aktualisierungen der animierten Steuerelemente, was zu ruckartigen diskontinuierlichen Animationen führt.

Video der Glitchy-Animation

Das animierte Steuerelement im obigen Video wird von einer TTimer-Komponente gesteuert. Das Problem besteht weiterhin, wenn Sie die Animationskomponenten von FireMonkey verwenden.

Untersuchung

Die Schieberegler rufen Repaint () auf, wenn sie angepasst werden. Durch einfaches Anpassen eines Schiebereglers wird ein dichter Strom von Repaint () - Aufrufen generiert, die verhindern, dass andere Steuerelemente aktualisiert werden.

Was ist zu tun?

Das Einfrieren von Animationen, während ein Steuerelement ständig aktualisiert wird, ist für meine Anwendung nicht geeignet. Mein erster Gedanke ist, die Repaint () -Aufrufe für etwas ähnlich der VCL Invalidate () -Methode zu tauschen, aber FireMonkey hat nichts vergleichbares AFAIK.

Gibt es eine gute Problemumgehung für dieses Problem?

    
Shannon 07.12.2011, 06:13
quelle

1 Antwort

4

Ich habe eine Timer-basierte Repaint-Methode erstellt, wie Arnaud Bouchez in den obigen Kommentaren vorgeschlagen hat. Bisher scheint es zu funktionieren.

Code

%Vor%

==

Verwendung

Ein Steuerelement kann durch einen Aufruf von:

neu gezeichnet werden %Vor%

Die InvalidateControl () - Prozedur aktualisiert das Steuerelement nicht sofort. Stattdessen fügt es das Steuerelement einer Liste hinzu. Ein globaler Timer überprüft später die Liste, ruft Repaint () auf und entfernt das Steuerelement aus der Liste. Mit dieser Methode kann ein Steuerelement bei Bedarf ungültig gemacht werden, es blockiert jedoch nicht, dass andere Steuerelemente aktualisiert werden, wie dies bei schnellen Repaint () -Aufrufen der Fall ist.

    
Shannon 08.12.2011, 00:42
quelle

Tags und Links