最近,我不得不为应用程序实现一个布局,其中可以根据用户是否登录来隐藏或通过滑入/滑出动画显示或显示菜单区域和状态区域。 以下视频显示了实际的布局:
在过去,我可能会使用自定义控件和自定义布局代码来实现这种行为(如“皮肤中的layoutChildren()方法”)。 但是这次我的设置有所不同,因为我使用的是Adam Bien的afterburner.fx ,现在有了FXML和一个控制器类。
那该怎么办呢? 我决定尝试使用锚定窗格来实现运气,并通过时间轴实例更新堆栈窗格上的约束。 约束存储在堆栈窗格的可观察属性映射中。 只要这些限制发生变化,就会自动请求锚定窗格的布局。 如果发生这种情况而没有任何闪烁,那么我们最终将获得一个流畅的动画。 顺便说一句,来自Swing,我总是希望闪烁,但是JavaFX通常不会发生闪烁。
最后,我写了下面的控制器类来管理锚窗格及其子堆栈窗格。 请注意中间属性menuPaneLocation和bottomPaneLocation的小技巧。 它们是必需的,因为动画时间轴可与属性一起使用。 因此,它会更新这些属性,并且每当它们更改时,都会应用新的锚定窗格约束。
import static javafx.scene.layout.AnchorPane.setBottomAnchor;
import static javafx.scene.layout.AnchorPane.setLeftAnchor;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.fxml.FXML;
import javafx.scene.layout.StackPane;
import javafx.util.Duration;</code>
/**
* This presenter covers the top-