Wie kann ich meine Ladeanimation in Javafx beheben? [geschlossen]
Posted: 22 May 2025, 17:09
Wie kann ich meine Ladeanimation in Java FX reparieren, die zu einem bestimmten Punkt angeht, aber dann plötzlich die Mitte erfrischt. Unten ist mein Code: < /p>
Code: Select all
package com.example.messengerappfx.util;
import javafx.animation.AnimationTimer;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
public class LoadingAnimation {
private final HBox container = new HBox(5);
private final Circle[] dots = new Circle[3];
private AnimationTimer timer;
private long animationDuration;
private long pauseDuration;
private double amplitude = 10;
private long startTime;
public LoadingAnimation(long animationDuration, long pauseDuration) {
this.animationDuration = animationDuration;
this.pauseDuration = pauseDuration;
initializeDots();
createAnimationTimer();
}
private void initializeDots() {
for (int i = 0; i < dots.length; i++) {
Circle dot = new Circle(4, Color.LIGHTGRAY);
dots[i] = dot;
container.getChildren().add(dot);
}
}
private void createAnimationTimer() {
timer = new AnimationTimer() {
@Override
public void handle(long now) {
if (startTime == 0) startTime = System.nanoTime();
long elapsed = (now - startTime) / 1_000_000;
long totalCycleDuration = animationDuration + pauseDuration;
long currentCycleTime = elapsed % totalCycleDuration;
animateDots(currentCycleTime);
}
};
}
private void animateDots(long currentCycleTime) {
if (currentCycleTime < animationDuration) {
for (int i = 0; i < dots.length; i++) {
double delay = i * (animationDuration / 3.0);
double phase = Math.max(0, Math.min(1, (currentCycleTime - delay) / (double)animationDuration));
dots[i].setTranslateY(-amplitude * Math.sin(phase * Math.PI));
}
} else {
resetDots();
}
}
private void resetDots() {
for (Circle dot : dots) {
dot.setTranslateY(0);
}
}
public void start() {
startTime = 0;
timer.start();
}
public void stop() {
timer.stop();
}
public HBox getNode() {
return container;
}
}