JavaFX Timeline add key frame

Description

JavaFX Timeline add key frame

import static java.lang.Math.random;

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.effect.BlendMode;
import javafx.scene.effect.BoxBlur;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.StrokeType;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Main extends Application {
 
   public static void main(String[] args) {
      launch(args);// w  ww.  j  a v a 2  s.c o m
   }
   
   @Override
   public void start(Stage primaryStage) {
      Group root = new Group();
      Scene scene = new Scene(root, 800, 600, Color.WHITE);
      primaryStage.setScene(scene);
      
      Group circles = new Group();
      for (int i = 0; i < 500; i++) {
         Circle circle = new Circle(30, Color.web("black", 0.10));
         circle.setStrokeType(StrokeType.OUTSIDE);
         circle.setStroke(Color.web("black", 0.15));
         circle.setStrokeWidth(2);
         circles.getChildren().add(circle);
      }
      
      Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(),
            new LinearGradient(0f, 1f, 1f, 0f, true, CycleMethod.REPEAT, 
                  new Stop[]{
                     new Stop(0, Color.web("#f8bd55")),
                     new Stop(0.14, Color.web("#c0fe56")),
                     new Stop(0.28, Color.ALICEBLUE),
                     new Stop(0.43, Color.web("#64c2f8")),
                     new Stop(0.57, Color.web("#be4af7")),
                     new Stop(0.71, Color.BLUEVIOLET),
                     new Stop(0.85, Color.web("#ef504c")),
                     new Stop(1, Color.web("#f2660f"))}
            ));
      colors.widthProperty().bind(scene.widthProperty());
      colors.heightProperty().bind(scene.heightProperty());
      Group blendModeGroup = new Group(
            new Group(
               new Rectangle(scene.getWidth(), scene.getHeight(),
                     Color.WHITE), circles), colors);
      colors.setBlendMode(BlendMode.OVERLAY);
      root.getChildren().add(blendModeGroup);     
      circles.setEffect(new BoxBlur(10, 10, 3));
      Timeline timeline = new Timeline();
      for (Node circle : circles.getChildren()) {
        timeline.getKeyFrames().addAll(
         new KeyFrame(Duration.ZERO,new KeyValue(circle.translateXProperty(),random() * scene.getWidth()),new KeyValue(circle.translateYProperty(),random() * scene.getHeight())),
         new KeyFrame(new Duration(60000),new KeyValue(circle.translateXProperty(),random() * scene.getWidth()),new KeyValue(circle.translateYProperty(),random() * scene.getHeight())));
      }
      timeline.setCycleCount(Animation.INDEFINITE);
      timeline.play();
      
      primaryStage.show();
   }
}



PreviousNext

Related