From 18000fae30361abbe03477d28b331ec67839aecd Mon Sep 17 00:00:00 2001 From: Glavo Date: Tue, 9 Dec 2025 15:32:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20TransitionPane=20=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=E8=A2=AB=E6=89=93=E6=96=AD=E6=97=B6=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#4957)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/animation/TransitionPane.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java index 2cda33e6a..2a5fe168e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java @@ -31,6 +31,7 @@ import org.jetbrains.annotations.Nullable; public class TransitionPane extends StackPane { private Node currentNode; + private Animation oldAnimation; public TransitionPane() { FXUtils.setOverflowHidden(this); @@ -50,6 +51,11 @@ public class TransitionPane extends StackPane { public void setContent(Node newView, AnimationProducer transition, Duration duration, Interpolator interpolator) { + if (oldAnimation != null) { + oldAnimation.stop(); + oldAnimation = null; + } + Node previousNode = currentNode != newView && getWidth() > 0 && getHeight() > 0 ? currentNode : null; currentNode = newView; @@ -80,15 +86,19 @@ public class TransitionPane extends StackPane { previousNode, newView, duration, interpolator); - newAnimation.setOnFinished(e -> { - setMouseTransparent(false); - getChildren().remove(previousNode); + newAnimation.statusProperty().addListener((observable, oldValue, newValue) -> { + if (oldValue == Animation.Status.RUNNING && newValue != Animation.Status.RUNNING) { + setMouseTransparent(false); + getChildren().remove(previousNode); - if (cacheHint != null) { - newView.setCache(false); + if (cacheHint != null) { + newView.setCache(false); + } } }); - FXUtils.playAnimation(this, "transition_pane", newAnimation); + + oldAnimation = newAnimation; + newAnimation.play(); }); }