Programmering

JavaFX 2 Animation: Path Transitions

Et af de hurtigste aspekter af JavaFX 2 er dets animationsunderstøttelse. Den indsigtsfulde Oprettelse af overgange og tidslinjeanimering i JavaFX dækker ved hjælp af både overgange og tidslinjer i JavaFX 2. I dette blogindlæg tilpasser jeg et eksempel, der er givet i denne tutorial, for specifikt at demonstrere Path Transitions.

Eksempel 2 ("Path Transition") vist i Oprettelse af overgange og tidslinjeanimering i JavaFX demonstrerer oprettelse af en sti med klasser fra JavaFX 2 "former" -pakken: javafx.scene.shape.Path, javafx.scene.shape.MoveTo og javafx .scene.shape.CubicCurve. Dette eksempel viser derefter instantiering af en javafx.animation.PathTransition og anvendelse af en instantificeret javafx.scene.shape.Rectangle for at bevæge sig langs den oprettede sti.

I min kodeliste nedenfor har jeg foretaget nogle små ændringer i eksempel 2 i Oprettelse af overgange og tidslinjeanimering i JavaFX. Jeg har specifikt ændret den bevægelige form fra et rektangel til en cirkel, tilføjet to "endeknapper" til stien som to separate cirkler og tilføjet muligheden for at ændre stiens opacitet sammen med de animerede cirkelbevægelser. Den gode bivirkning ved at bruge en nul opacitet er, at selve stien ikke vises, og det ser ud som om cirklen bevæger sig frit. Jeg forsøgte at bryde hvert større stykke af dette op i sin egen private metode for at gøre det lettere at se "bidderne" af funktionalitet.

JavaFxAnimations.java

pakke dustin. eksempler; importere java.util.List; import javafx.animation.PathTransition; import javafx.animation.Timeline; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape. *; import javafx.stage.Stage; import javafx.util.Duration; / ** * Simpelt eksempel, der demonstrerer JavaFX-animationer. * * Lidt tilpasset fra eksempel 2 ("Path Transition"), som findes i * "Oprettelse af overgange og tidslinjeanimering i JavaFX" * (//docs.oracle.com/javafx/2.0/animations/jfxpub-animations.htm). * * @forfatter Dustin * / offentlig klasse JavaFxAnimations udvider applikationen {/ ** * Generer sti, hvor animation vil forekomme. * * @param pathOpacity Opaciteten af ​​stirepræsentationen. * @return Genereret sti. * / privat sti generereCurvyPath (endelig dobbelt stiOpacity) {endelig sti sti = ny sti (); path.getElements (). tilføj (ny MoveTo (20,20)); path.getElements (). tilføj (ny CubicCurveTo (380, 0, 380, 120, 200, 120)); path.getElements (). tilføj (ny CubicCurveTo (0, 120, 0, 240, 380, 240)); path.setOpacity (pathOpacity); returvej } / ** * Generer stiovergangen. * * @param form Form til at rejse langs stien. * @param sti Sti, der skal rejses på. * @retur PathTransition. * / privat PathTransition generere PathTransition (endelig form form, sidste sti sti) {endelig PathTransition pathTransition = ny PathTransition (); pathTransition.setDuration (Duration.seconds (8.0)); pathTransition.setDelay (Varighed.sekunder (2.0)); pathTransition.setPath (sti); pathTransition.setNode (form); pathTransition.setOrientation (PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); pathTransition.setCycleCount (tidslinje.INDEFINIT); pathTransition.setAutoReverse (sand); returvejTransition; } / ** * Bestem stiens opacitet baseret på kommandolinjeargumentet, hvis det er angivet * eller nul som standard, hvis der ikke er nogen numerisk værdi. * * @retur Opacitet til brug for sti. * / privat dobbelt determPathOpacity () {final Parameters params = getParameters (); endelige listeparametre = params.getRaw (); dobbelt pathOpacity = 0,0; hvis (! parameters.isEmpty ()) {prøv {pathOpacity = Double.valueOf (parameters.get (0)); } fange (NumberFormatException nfe) {pathOpacity = 0.0; }} returner stiOpacity; } / ** * Anvend animation, emnet for denne klasse. * * @param gruppe Gruppe, som animationen anvendes til. * / privat ugyldig anvendelseAnimation (endelig gruppe gruppe) {endelig cirkel cirkel = ny cirkel (20, 20, 15); cirkel.setFill (farve. MØRKT); endelig sti-sti = genererCurvyPath (determinerPathOpacity ()); group.getChildren (). tilføj (sti); group.getChildren (). tilføj (cirkel); group.getChildren (). tilføj (ny cirkel (20, 20, 5)); group.getChildren (). tilføj (ny cirkel (380, 240, 5)); endelig PathTransition overgang = generer PathTransition (cirkel, sti); transition.play (); } / ** * Start JavaFX-applikationen * * @param-fase Primærfase. * @throws Undtagelse Undtagelse kastet under applikationen. * / @ Overstyr offentlig ugyldig start (sidste fase) kaster undtagelse {endelig gruppe rootGroup = ny gruppe (); endelig scene scene = ny scene (rootGroup, 600, 400, Color.GHOSTWHITE); stage.setScene (scene); stage.setTitle ("JavaFX 2-animationer"); stage.show (); ApplyAnimation (rootGroup); } / ** * Hovedfunktion til kørsel af JavaFX-applikation. * * @param argumenter Kommandolinjeargumenter; valgfrit første argument er * opacitet for den sti, der skal vises (0 gør sti * usynlig). * / public static void main (final String [] argumenter) {Application.launch (argumenter); }} 

Følgende serie af skærmbillede viser dette enkle JavaFX-animationseksempel i aktion. De er anført i rækkefølge efter faldende opacitet (fra 1,0 til 0,0).

Demonstration af tilpasset PathTransition-eksempel (opacitet 1.0)

Demonstration af tilpasset PathTransition-eksempel (opacitet 0,2)

Demonstration af tilpasset PathTransition-eksempel (opacitet 0,05)

Demonstration af tilpasset PathTransition-eksempel (opacitet 0,0)

Hvert af ovenstående skærmbillede blev taget efter at have kørt applikationen med det angivne kommandolinjeargument (1, 0,2, 0,05 og 0).

Dette tilpassede eksempel har vist anvendelse PathTransition for at animere en knuds bevægelse langs den foreskrevne sti (jeg har blogget om brug af sti og nogle af dens alternativer før). Udviklere kan implementere deres eget derivat af Transition, og der understøttes også andre leverede overgange (såsom FadeTransition, ParallelTransition og SequentialTransition).

Det er en ligetil proces til hurtigt at begynde at anvende JavaFX 2-animation ved hjælp af de medfølgende overgangsklasser.

Oprindelig postering tilgængelig på //marxsoftware.blogspot.com/ (Inspireret af faktiske begivenheder)

Denne historie, "JavaFX 2 Animation: Path Transitions" blev oprindeligt udgivet af JavaWorld.