悬停效果改为在 JFXRippler 中实现 by CiiLu · Pull Request #5757 · HMCL-dev/HMCL
目前的动画实现方式在鼠标快速移入移出时会产生明显的跳变。这是因为每次事件都会创建一个新的 Transition,并且动画总是从固定的起始值(0 或 1)开始,而没有考虑当前的透明度状态。建议改用 Timeline 并直接对 hoverOverlay 的 opacityProperty 进行动画处理,这样 JavaFX 会自动从当前值开始平滑过渡,同时也能减少对象的频繁创建。
mouseEventHandler = event -> { if (coverAnimation != null) { coverAnimation.stop(); } boolean isEntered = event.getEventType() == MouseEvent.MOUSE_ENTERED; Color onSurface = Themes.getColorScheme().getOnSurface(); hoverOverlay.setFill(Color.color(onSurface.getRed(), onSurface.getGreen(), onSurface.getBlue(), 0.04)); coverAnimation = new Timeline(new KeyFrame(Motion.SHORT4, new KeyValue(hoverOverlay.opacityProperty(), isEntered ? 1 : 0, isEntered ? Motion.EASE_IN : Motion.EASE_OUT))); coverAnimation.play(); };