方法一:缩放动画:
import javafx.animation.ScaleTransition;
import javafx.application.Application;
import javafx.scene.CacheHint;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class ScaleTransitionTest1 extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
// root.setTranslateX(100);
// root.setTranslateY(100);
primaryStage.setScene(new Scene(root, 200, 200));
Rectangle rect = new Rectangle (50, 50, 100, 100);
rect.setArcHeight(50);
rect.setArcWidth(50);
rect.setFill(Color.VIOLET);
Group group1 = new Group();
group1.getChildren().add(rect);
ScaleTransition scaleTransition = new ScaleTransition(Duration.millis(1000), group1);
// 中心放大至两倍
scaleTransition.setToX(2);
scaleTransition.setToY(2);
group1.setCacheHint(CacheHint.SPEED);
scaleTransition.setOnFinished(event -> {
// 缩放后设置回QUALITY模式 显示清晰
group1.setCacheHint(CacheHint.QUALITY);
});
scaleTransition.play();
root.getChildren().add(group1);
primaryStage.show();
}
}
方法二:自带缩放:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
public class ScaleTransitionTest2 extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
// root.setTranslateX(100);
// root.setTranslateY(100);
primaryStage.setScene(new Scene(root, 200, 200));
Rectangle rect = new Rectangle(50, 50, 100, 100);
rect.setArcHeight(50);
rect.setArcWidth(50);
rect.setFill(Color.VIOLET);
Group group1 = new Group();
group1.getChildren().add(rect);
Thread thread = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
group1.getTransforms().clear();
// 以场景左上为参考点,放大至两倍
group1.getTransforms().add(new Scale(2, 2, 0, 0));
// 以矩形左上为参考点,放大至两倍
// group1.getTransforms().add(new Scale(2, 2, 50, 50));
});
thread.start();
root.getChildren().add(group1);
primaryStage.show();
}
}