我已经成功实现了一个简单的动画,使左窗格滑入和滑出。但这还不够。
当显示窗格(滑入)时,它就在另一个节点旁边。 窗口完全按照预期填满。这意味着Node被锚定到窗口的右边缘。
但是,当窗格滑出时,它会自然地在屏幕边缘和滑动窗格旁边的上述节点之间产生间隙。
我需要填补这个空白,以便这个节点可以利用更多的位置并展示更多东西。
我正在使用缩放动画,但我错了:内容是拉伸的。我也试过应用相同的过渡动画,但这显然是错误的,因为它不是在窗格和节点之间有间隙,而是在节点和窗口的右边缘之间。
所以我正在寻找一个动画,当窗格滑出时可以填充间隙并利用释放的空间,反之亦然,当窗格滑回时,节点会回到原来的状态大小
有没有办法完成这样的事情?谢谢!
以下是一些代码:
显示MaiNWindow.fxml
的{{1}}:
ListView
现在动画代码:
<AnchorPane id="AnchorPane" prefHeight="720.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="package.mycontroller">
<children>
<ListView fx:id="menuItems" prefHeight="720.0" prefWidth="476.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="0.0" />
<ListView fx:id="itemsList" layoutX="476.0" prefHeight="720.0" prefWidth="804.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="476.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
</children>
</AnchorPane>
这非常合适: menuitems 会在没有打嗝的情况下滑入和滑出。
正如我所说,当它滑出时,有间隙。
如果我在 itemsList 上使用相同类型的final TranslateTransition expandMenuItems = new TranslateTransition(new Duration(500), this.menuItems);
final TranslateTransition collapseMenuItems = new TranslateTransition(new Duration(500), this.menuItems);
expandMenuItems.setToX(0);
// Event handler for sliding in/out the left pane
this.menu.setOnMouseClicked((final MouseEvent event) -> {
if (this.menuItems.getTranslateX() != 0) {
expandContacts.play();
} else {
collapseContacts.setToX(-(this.menuItems.getWidth()));
collapseContacts.play();
}
});
,则差距现在位于 itemsList 之后,因此不是这样。
TranslationAnimation
也不起作用,因为它会删除丑陋的 itemsList 的内容。
寻找解决方案,我偶然发现了这个视频,这正是我要找的内容的代表:https://www.youtube.com/watch?v=cKXFG4pAoys