Wie kann ich meine Ladeanimation in Javafx beheben? [geschlossen]Java

Java-Forum
Anonymous
 Wie kann ich meine Ladeanimation in Javafx beheben? [geschlossen]

Post by Anonymous »

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;
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post