JavaFX - 动画



  • 简述

    通常,动画对象意味着通过快速显示来创建其运动的错觉。在 JavaFX 中,可以通过随时间更改其属性来对节点进行动画处理。JavaFX 提供了一个名为的包javafx.animation. 此包包含用于为节点设置动画的类。动画是所有这些类的基类。
    使用 JavaFX,您可以应用动画(过渡),例如 Fade Transition, Fill Transition, Rotate Transition, Scale Transition, Stroke Transition, Translate Transition, Path Transition, Sequential Transition, Pause Transition, Parallel Transition, 等等。
    所有这些转换都由包中的各个类表示 javafx.animation.
    要将特定动画应用于节点,您必须按照以下步骤操作 -
    • 使用相应的类创建一个 require 节点。
    • 实例化要应用的相应过渡(动画)类
    • 设置过渡的属性和
    • 最后使用 play() 的方法 Animation 班级。
    在本章中,我们将讨论基本转换(旋转、缩放、平移)的示例。
  • 旋转过渡

    以下是在 JavaFX 中演示 Rotate Transition 的程序。将此代码保存在名称为的文件中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) {      
          //Creating a hexagon 
          Polygon hexagon = new Polygon();        
          
          //Adding coordinates to the hexagon 
          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, 
          }); 
          //Setting the fill color for the hexagon 
          hexagon.setFill(Color.BLUE); 
           
          //Creating a rotate transition    
          RotateTransition rotateTransition = new RotateTransition(); 
          
          //Setting the duration for the transition 
          rotateTransition.setDuration(Duration.millis(1000)); 
          
          //Setting the node for the transition 
          rotateTransition.setNode(hexagon);       
          
          //Setting the angle of the rotation 
          rotateTransition.setByAngle(360); 
          
          //Setting the cycle count for the transition 
          rotateTransition.setCycleCount(50); 
          
          //Setting auto reverse value to false 
          rotateTransition.setAutoReverse(false); 
          
          //Playing the animation 
          rotateTransition.play(); 
             
          //Creating a Group object   
          Group root = new Group(hexagon); 
             
          //Creating a scene object 
          Scene scene = new Scene(root, 600, 300);   
          
          //Setting title to the Stage 
          stage.setTitle("Rotate 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 RotateTransitionExample.java 
    java RotateTransitionExample
    
    执行时,上述程序会生成一个 JavaFX 窗口,如下所示。
    旋转过渡
  • 尺度过渡

    以下是在 JavaFX 中演示 Scale Transition 的程序。将此代码保存在名称为的文件中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 中演示 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 窗口,如下所示。
    转换过渡
    除此之外,JavaFX 还提供了在节点上应用更多转换的类。以下是 JavaFX 支持的其他类型的转换。