-
Notifications
You must be signed in to change notification settings - Fork 0
de trident
package org.pushingpixels.trident von Kirill Grouchnikov dient zum Erstellen von Animationen in Java.
Stichworte:
- timeline : Szenario mit Zeitskala für die Animation mit Beginn und Ende im Intervall [0..1]
- timeline duration : Dauer der Animation in msec
- timeline pulse / point : ein Ereignis während der Animation auf der Zeitskala
- timeline play : führt die Annimation aus von vom Beginn bis zum Ende
- timeline state : status der timeline
-
timeline property : ein Objekt xxx mit
publicsettervoid setXxx(float point)
Die Anzahl der Ereignisse/pulse ist propotional zu Dauer/duration. Sowohl die Anzahl wie auch der Abstand zwischen zwei Ereignisse hängt von der Systemauslastung ab und sind dadurch nicht verhersagbar.
Beispiel: Animation über 500 Millisekunden liefert 13 pulse
pulseno 0: 0.0 -> 0.0
pulseno 1: 0.0 -> 0.0
pulseno 2: 0.0 -> 0.082
pulseno 3: 0.082 -> 0.176
pulseno 4: 0.176 -> 0.268
pulseno 5: 0.268 -> 0.36
pulseno 6: 0.36 -> 0.454
pulseno 7: 0.454 -> 0.548
pulseno 8: 0.548 -> 0.64199996
pulseno 9: 0.64199996 -> 0.738
pulseno 10: 0.738 -> 0.83199996
pulseno 11: 0.83199996 -> 0.928
pulseno 12: 0.928 -> 1.0
Nehmen wir an wir wollen eine App zum Lichteinschalten erstellen. Zunächst ganz einfach:
- Bildschirm ist dunkel
- App wird gestartet : Bildschirm ist hell, man sieht in den Raum
Das ist ohne Animatiion.
Mit Animation geht das Einschalten langsamer. Wie beim Dimmer:
- Der Raum, wo wir das "Licht einschalten" ist ein beliebiges Foto
- Dh. unsere app blendet das Foto ein oder auch aus
- wir impementieren die Animation mittels JXPanel, denn dort gibt es das Alpha Support Feature
- Die Animation soll 2 Sekunden dauern, timeline duration = 2000
- Initial is der Bildschirm/JXPanel voll transparent
xpanel.Alpha==0f(man kann ihn nicht sehen) - Dagegen bedeutet
xpanel.Alpha==1fder Inhalt von JXPanel (das Foto) ist voll sichtbar - Ein Dimmerprogramm, das per Regler für alpa bedient wird, gibt es als Test
PaintPickerDemo - wir wollen aber einen animierten Dimmer
- so ein Programm existiert als
XPanelDemoin SwingSet3-Demos
Als timeline property nutzen wir xpanel.alpha für das wir noch eine setter Methode setAlphaProp benötigen. Ganz nebenbei annimieren wir dabei noch einen Schieberegler.
Timeline timeline;
private JXPanel xpanel;
private JSlider alphaSlider;
...
public void setAlphaProp(float newValue) {
xpanel.setAlpha(newValue);
alphaSlider.setValue((int)(newValue*255+0.5));
}
...
timeline.addPropertyToInterpolate("alphaProp", 0.0f, 1.0f);Das Einblenden fade in wird mit timeline.play(); implementiert.
Auch das Ausblenden lässt sich einfach implementieren. Die Ereignisse der Animation werden rückwärts generiert. Wir müssen nur sicherstellen, dass anfangs Alpha auf 1 gesetzt wird:
setAlphaProp(1f);
timeline.playReverse(); // fade outBeim timeline play bzw. playReverse werden mehrere timeline state durchlaufen
+------------------+
v |
IDLE --play---------> PLAYING_FORWARD --> DONE --notifying listeners--> IDLE
\-playReverse--> PLAYING_REVERSE -/
^ |
+------------------+
PLAYING_FORWARD und PLAYING_REVERSE werden aktive states genannt. Es gibt noch inaktive Status, auf die ich hier nicht eingehe:
- READY
- SUSPENDED
- CANCELLED
Ein anderes Beispiel findet man bei der Anzeige eines Wanderwegs in der Demo zum JXMapKit. Die ganze Animation dauert 4,5 Sekunden. Beim initialen Laden wird nur ein Teil der Animation gezeigt.

Algorithmus : eine Sammlung von Algorithmen in java, von Euklid bis RSA
AutoComplete : package bzw. class zur Autovervollständigung in Text Komponenten
Batik : Subprojekt von Apache XML Graphics Project
BSAF : Better Swing Application Framework
BuddySupport : erweitert Textkomponenten
Color : Farben im Farbkreis, Farbraum
Collection views : zu den SwingX collection views gehören JXList, JXTree, JXTable und JXTreeTable
ComboBox : allgemein (Wikipedia)
Data Transfer : wird im Java Kontext zusammen mit Cut&Paste und Drag and Drop verwendet
Demos : Demos-doku, github repo: SwingSet3-demos
dependences : projects in SwingSet3
DnD : steht für Drag and Drop
EDT : Event Dispatch Thread
GPX : GPS Exchange Format - ein XML-Datenformat mit Geo-Ortspunkten, -Routen und -Tracks
GUI : Graphical User Interface, Benutzeroberfläche, allgemein, siehe auch L&F (Look&Feel)
GVT : Batik Graphics Vector Tree (GVT) gehört zu Apache XML Graphics Project
JDNC : Java Desktop Network Component, s. BSAF
JPMS : Java Platform Module System, aka Modulsystem Jigsaw
JTextComponent, JTextField, JTextArea : siehe Prompt- und BuddySupport
Kenai : History of SwingLabs
L&F : als Look&Feel wird das Aussehen und Verhalten der Benutzeroberfäche bezeichnet.
LazyValue : TODO siehe MetalButtonPainterIssues
List, JList, JXList : Listen von Werten darstellen List, JList, JXList
maven central : Central OSSRH
Nimbus : Mit Java 1.6 wurde das cross-platform Look-and-Feel eingeführt. Es wird per properties konfiguriert, siehe Nimbus-UI-defaults
OSSRH : Open Source Software Repository Hosting, zentrales öffentliches Repository für Artefakte: Central-OSSRH
PLAF : steht für Pluggable Look And Feel
PromptSupport : erweitert Textkomponenten
public key server : siehe distributing-your-public-key
Renderer : die Darstellung von mehr oder weniger komplexen Objekten auf der Benutzeroberfäche im gewählten Look&Feel
SAM
: Single Abstract Method interface, Beispiel StringValue
SVG : Scalable Vector Graphics, XML-Beschreibung von Vektorgrafiken
SwingLabs : History of SwingLabs
SwingSet2 : github repo: SwingSet2-demos
SwingSet3 : github repo: SwingSet3, SwingSet3-demos
SwingX
: package org.jdesktop.swingx SwingX
Synth : Seit Java 1.5 gibt es das Synth-Look-and-Feel, dessen Erscheinungsbild in einer XML-Datei beschrieben wird, s. Nimbus
Table
: JXTable (de) erweitert javax.swing.JTable
Tests : Tests (de)
TextComponent : siehe Prompt- und BuddySupport
Tree
: JXTree (de) erweitert javax.swing.JTree
TreeTable : JXTreeTable (de) ist ein Zwitter mit Eigenschaften von Tree und Table
Trident : Trident animation library (de)
UI : User Interface, Benutzerschnittstelle, allgemein, siehe auch GUI, L&F (Look&Feel)