All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.guigarage.extreme.LoadingAnimationPane Maven / Gradle / Ivy

The newest version!
package com.guigarage.extreme;

import javafx.animation.TranslateTransition;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.util.Duration;

public class LoadingAnimationPane extends Region {

    private Circle redCircle;
    private Circle blueCircle;
    private Circle yellowCircle;
    private Circle greenCircle;

    private double radius;

    private double spacing;

    public LoadingAnimationPane(double radius) {
        this.radius = radius;
        spacing = radius;
        redCircle = new Circle(radius, Color.RED);
        blueCircle = new Circle(radius, Color.BLUE);
        yellowCircle = new Circle(radius, Color.YELLOW);
        greenCircle = new Circle(radius, Color.GREEN);
        getChildren().addAll(redCircle, blueCircle, yellowCircle, greenCircle);

        setMaxHeight(USE_PREF_SIZE);
        setMinHeight(USE_PREF_SIZE);
        setMaxWidth(USE_PREF_SIZE);
        setMinWidth(USE_PREF_SIZE);

        TranslateTransition redTransition = new TranslateTransition(Duration.millis(800), redCircle);
        redTransition.setFromY(-radius);
        redTransition.setToY(radius);
        redTransition.setAutoReverse(true);
        redTransition.setCycleCount(TranslateTransition.INDEFINITE);

        TranslateTransition blueTransition = new TranslateTransition(Duration.millis(800), blueCircle);
        blueTransition.setFromY(-radius);
        blueTransition.setToY(radius);
        blueTransition.setDelay(Duration.millis(200));
        blueTransition.setAutoReverse(true);
        blueTransition.setCycleCount(TranslateTransition.INDEFINITE);

        TranslateTransition yellowTransition = new TranslateTransition(Duration.millis(800), yellowCircle);
        yellowTransition.setFromY(-radius);
        yellowTransition.setToY(radius);
        yellowTransition.setDelay(Duration.millis(400));
        yellowTransition.setAutoReverse(true);
        yellowTransition.setCycleCount(TranslateTransition.INDEFINITE);

        TranslateTransition greenTransition = new TranslateTransition(Duration.millis(800), greenCircle);
        greenTransition.setFromY(-radius);
        greenTransition.setToY(radius);
        greenTransition.setDelay(Duration.millis(600));
        greenTransition.setAutoReverse(true);
        greenTransition.setCycleCount(TranslateTransition.INDEFINITE);

        sceneProperty().addListener(e -> {
            if(getScene() == null) {
                redTransition.stop();
                blueTransition.stop();
                yellowTransition.stop();
                greenTransition.stop();
            } else {
                redTransition.playFromStart();
                blueTransition.playFromStart();
                yellowTransition.playFromStart();
                greenTransition.playFromStart();
            }
        });
    }

    @Override
    protected void layoutChildren() {
        super.layoutChildren();
        redCircle.relocate(0, radius);
        blueCircle.relocate(radius * 3, radius);
        yellowCircle.relocate(radius * 6, radius);
        greenCircle.relocate(radius * 9, radius);

    }

    @Override
    protected double computePrefWidth(double height) {
        return getInsets().getLeft() + radius * 11 + getInsets().getRight();
    }

    @Override
    protected double computePrefHeight(double width) {
        return getInsets().getTop() + radius * 6 + getInsets().getBottom();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy