JavaFX 动画效果

引言

JavaFX 是一个用于构建富客户端应用程序的框架,提供了丰富的图形库和用户界面控件。其中,动画效果是 JavaFX 的一个重要特性,可以使应用程序更具吸引力和交互性。本文将介绍 JavaFX 中的动画效果,并提供一些代码示例,帮助读者理解和使用动画效果。

JavaFX 动画基础

JavaFX 提供了几种常见的动画类型,包括平移(Translate)、缩放(Scale)、旋转(Rotate)和渐变(Fade)等。这些动画可以通过 JavaFX 的动画类来创建,并通过设置属性来控制动画的行为。

平移动画

平移动画可以用于将一个节点从一个位置平滑地移动到另一个位置。以下是一个简单的平移动画示例:

import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TranslateAnimationExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        Rectangle rectangle = new Rectangle(100, 100);
        rectangle.setStyle("-fx-fill: blue;");

        TranslateTransition translateTransition = new TranslateTransition(Duration.seconds(2), rectangle);
        translateTransition.setFromX(0);
        translateTransition.setToX(200);
        translateTransition.setCycleCount(TranslateTransition.INDEFINITE);
        translateTransition.setAutoReverse(true);
        translateTransition.play();

        StackPane root = new StackPane(rectangle);
        Scene scene = new Scene(root, 400, 400);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在上面的代码中,我们创建了一个 Rectangle 对象,并设置其初始位置为 (0, 0)。然后,我们创建了一个 TranslateTransition 对象,并设置其持续时间为 2 秒。接下来,我们通过调用 setFromX()setToX() 方法设置平移的起始位置和目标位置。最后,我们通过调用 play() 方法启动动画。

缩放动画

缩放动画可以用于将一个节点平滑地放大或缩小。以下是一个简单的缩放动画示例:

import javafx.animation.ScaleTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class ScaleAnimationExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        Rectangle rectangle = new Rectangle(100, 100);
        rectangle.setStyle("-fx-fill: blue;");

        ScaleTransition scaleTransition = new ScaleTransition(Duration.seconds(2), rectangle);
        scaleTransition.setFromX(1);
        scaleTransition.setFromY(1);
        scaleTransition.setToX(2);
        scaleTransition.setToY(2);
        scaleTransition.setCycleCount(ScaleTransition.INDEFINITE);
        scaleTransition.setAutoReverse(true);
        scaleTransition.play();

        StackPane root = new StackPane(rectangle);
        Scene scene = new Scene(root, 400, 400);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在上面的代码中,我们创建了一个 Rectangle 对象,并设置其初始大小为 (100, 100)。然后,我们创建了一个 ScaleTransition 对象,并设置其持续时间为 2 秒。接下来,我们通过调用 setFromX()setFromY()setToX()setToY() 方法设置缩放的起始大小和目标大小。最后,我们通过调用 play() 方法启动动画。

旋转动画

旋转动画可以用于将一个节点平滑地旋转一定角度。以下是一个简单的旋转动画示例:

import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class RotateAnimationExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        Rectangle rectangle = new Rectangle(100, 100);
        rectangle.setStyle("-fx-fill: blue;");

        RotateTransition rotateTransition = new RotateTransition(Duration.seconds(2), rectangle);
        rotateTransition.setByAngle(360);
        rotateTransition.setCycleCount(RotateTransition.INDEFINITE