JavaFX - 动画
一般来说,为对象制作动画意味着通过快速显示来创建其运动的幻觉。在 JavaFX 中,可以通过随时间更改节点的属性来为节点制作动画。JavaFX 提供了一个名为 javafx.animation 的包。此包包含用于为节点制作动画的类。动画是所有这些类的基类。
使用 JavaFX,您可以应用动画(过渡),例如 淡入过渡、填充过渡、旋转过渡、缩放过渡、描边过渡、平移过渡、路径过渡、顺序过渡、暂停过渡、并行过渡 等。
所有这些过渡都由包 javafx.animation 中的各个类表示。
要将特定动画应用于节点,您必须遵循以下步骤 −
使用相应的类创建所需节点。
实例化相应的过渡(动画)类,用于应用
设置过渡的属性并
最后使用 Animation 类的 play() 方法播放过渡。
在本章中,我们将讨论基本过渡(旋转、缩放、平移)的示例。
旋转过渡
以下是演示 JavaFX 中的旋转过渡的程序。将此代码保存在名为 RotateTransitionExample.java 的文件中。
import javafx.animation.RotateTransition; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape.Polygon; import javafx.stage.Stage; import javafx.util.Duration; public class RotateTransitionExample extends Application { @Override public void start(Stage stage) { //创建六边形 Polygon hexagon = new Polygon(); //向六边形添加坐标 hexagon.getPoints().addAll(new Double[]{ 200.0, 50.0, 400.0, 50.0, 450.0, 150.0, 400.0, 250.0, 200.0, 250.0, 150.0, 150.0, }); //设置六边形的填充颜色 hexagon.setFill(Color.BLUE); //创建旋转过渡 RotateTransition rotateTransition = new RotateTransition(); //设置过渡的持续时间 rotateTransition.setDuration(Duration.millis(1000)); //设置过渡的节点 rotateTransition.setNode(hexagon); //设置旋转的角度 rotateTransition.setByAngle(360); //设置过渡的循环次数 rotateTransition.setCycleCount(50); //将自动反转值设置为 false rotateTransition.setAutoReverse(false); //播放动画 rotateTransition.play(); //创建 Group 对象 Group root = new Group(hexagon); //创建 scene 对象 Scene scene = new Scene(root, 600, 300); //设置 Stage 的标题 stage.setTitle("旋转过渡示例 "); //将场景添加到舞台(Stage) stage.setScene(scene); //显示舞台(Stage)内容 stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac RotateTransitionExample.java java RotateTransitionExample
执行时,上述程序将生成一个 JavaFX 窗口,如下所示。
![旋转过渡](/javafx/images/rotate_transition.jpg)
缩放过渡
以下是演示 JavaFX 中缩放过渡的程序。将此代码保存在名为 ScaleTransitionExample.java 的文件中。
import javafx.animation.ScaleTransition; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import javafx.util.Duration; public class ScaleTransitionExample extends Application { @Override public void start(Stage stage) { //Drawing a Circle Circle circle = new Circle(); //Setting the position of the circle circle.setCenterX(300.0f); circle.setCenterY(135.0f); //Setting the radius of the circle circle.setRadius(50.0f); //Setting the color of the circle circle.setFill(Color.BROWN); //Setting the stroke width of the circle circle.setStrokeWidth(20); //Creating scale Transition ScaleTransition scaleTransition = new ScaleTransition(); //Setting the duration for the transition scaleTransition.setDuration(Duration.millis(1000)); //Setting the node for the transition scaleTransition.setNode(circle); //Setting the dimensions for scaling scaleTransition.setByY(1.5); scaleTransition.setByX(1.5); //Setting the cycle count for the translation scaleTransition.setCycleCount(50); //Setting auto reverse value to true scaleTransition.setAutoReverse(false); //Playing the animation scaleTransition.play(); //Creating a Group object Group root = new Group(circle); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Scale transition example"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac ScaleTransitionExample.java java ScaleTransitionExample
执行时,上述程序将生成一个 JavaFX 窗口,如下所示。
![比例转换](/javafx/images/scale_transition.jpg)
转换过渡
以下是演示 JavaFX 中的 Translate Transition 的程序。将此代码保存在名为 TranslateTransitionExample.java 的文件中。
import javafx.animation.TranslateTransition; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import javafx.util.Duration; public class TranslateTransitionExample extends Application { @Override public void start(Stage stage) { //Drawing a Circle Circle circle = new Circle(); //Setting the position of the circle circle.setCenterX(150.0f); circle.setCenterY(135.0f); //Setting the radius of the circle circle.setRadius(100.0f); //Setting the color of the circle circle.setFill(Color.BROWN); //Setting the stroke width of the circle circle.setStrokeWidth(20); //Creating Translate Transition TranslateTransition translateTransition = new TranslateTransition(); //Setting the duration of the transition translateTransition.setDuration(Duration.millis(1000)); //Setting the node for the transition translateTransition.setNode(circle); //Setting the value of the transition along the x axis. translateTransition.setByX(300); //Setting the cycle count for the transition translateTransition.setCycleCount(50); //Setting auto reverse value to false translateTransition.setAutoReverse(false); //Playing the animation translateTransition.play(); //Creating a Group object Group root = new Group(circle); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Translate transition example"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac TranslateTransitionExample.java java TranslateTransitionExample
执行时,上述程序将生成一个 JavaFX 窗口,如下所示。
![Translate Transition](/javafx/images/translate_transition.jpg)
除此之外,JavaFX 还提供了在节点上应用更多转换的类。以下是 JavaFX 支持的其他类型的转换。
影响节点属性的转换 淡入淡出、填充、描边
涉及多个基本转换的转换 顺序、并行、暂停
沿指定路径平移对象的转换 路径转换