📜  JavaFX 动画(1)

📅  最后修改于: 2023-12-03 15:01:36.243000             🧑  作者: Mango

JavaFX 动画

JavaFX 是一个用于构建富互联网应用程序的GUI工具包和多媒体框架。其中,JavaFX 动画是一种强大的工具,可以让开发人员为用户界面添加眼花缭乱的动画效果。

基本动画

我们可以使用 JavaFX 的 Timeline 类创建基本动画。下面是一个示例:

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

public class BasicAnimationExample extends Application {
    @Override
    public void start(Stage stage) {
        Rectangle rectangle = new Rectangle(100, 60, Color.RED);
        StackPane root = new StackPane(rectangle);
        Scene scene = new Scene(root, 300, 250);

        TranslateTransition translateTransition = new TranslateTransition(Duration.seconds(1), rectangle);
        translateTransition.setFromX(-150);
        translateTransition.setToX(150);
        translateTransition.setCycleCount(Timeline.INDEFINITE);
        translateTransition.setAutoReverse(true);
        translateTransition.play();

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

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

这个示例创建了一个展示动画的 Rectangle 对象,并将其添加到 StackPane 中。然后,我们创建了一个 TranslateTransition 对象,该对象将 Translate 属性应用于矩形的 X 坐标。此动画在 1 秒钟内从 -150 移动到 150,并反复进行。此外,因为我们设置了 setAutoReverse(true),所以矩形会在达到指定位置后返回到其起始位置。

实现自定义动画

我们还可以创建自定义的 JavaFX 动画。下面是一个示例:

import javafx.animation.Animation;
import javafx.animation.Transition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class CustomAnimationExample extends Application {
    @Override
    public void start(Stage stage) {
        Rectangle rectangle = new Rectangle(100, 60, Color.RED);
        StackPane root = new StackPane(rectangle);
        Scene scene = new Scene(root, 300, 250);

        Transition transition = new Transition() {
            {
                setCycleDuration(Duration.seconds(3));
            }

            @Override
            protected void interpolate(double frac) {
                double yOffset = frac * 100;
                rectangle.setTranslateY(yOffset);
            }
        };
        transition.setCycleCount(Animation.INDEFINITE);
        transition.setAutoReverse(true);
        transition.play();

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

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

这个示例创建了一个自定义的动画,它将矩形的 Translate 属性应用于 Y 坐标。矩形的 Y 偏移量是通过动画中的小数 frac 计算的。此动画在 3 秒钟内完成一次,反复进行,并设置了反向播放的选项。

总结

JavaFX 动画是一种强大的工具,可以用于创建各种令人印象深刻的动画效果。使用 Timeline 或自定义 Transition 对象可以实现复杂的动画。