动画静态属性?

时间:2015-07-31 18:02:42

标签: java javafx javafx-8

刚进入JavaFX,非常喜欢它,但我不太确定如何为AnchorPane.leftAnchor属性设置动画。

目前,我正在使用时间轴来动画Node.translateXProperty(),这给了我一个很好的平滑动画。但是,虽然我的节点似乎移动了,但似乎在接收鼠标点击方面,它还没有移动。实际上,我想要做的是为节点的AnchorPane.leftAnchor静态属性设置动画,这可能吗?

理想情况下,我希望保留我的时间轴,因为它也在做其他事情,所以..

1)是否可以像设置这样的常规属性一样动画静态属性:

new KeyFrame(Duration.ZERO, new KeyValue(node.translateXProperty(), from, Interpolator.EASE_BOTH))

2)如果不可能,我可以翻译鼠标点击以匹配翻译位置吗?

干杯

加里

1 个答案:

答案 0 :(得分:3)

如果您为translateXtranslateY属性设置动画,则MouseEvent.getX()MouseEvent.getY()检索到的动画节点上的鼠标坐标将为该节点的坐标系本地:即它们不会受到节点本身位置变化的影响。如果您为layoutXlayoutY属性设置动画(如果您为AnchorPane.leftAnchor"属性"设置动画,则可以执行此操作。)

您可以通过调用Node.localToParent(...)将节点的本地坐标系中的点转换为其父坐标系。

请注意Node上有其他类似的方法,例如localToScenelocalToScreen,以及MouseEvent上的一些便捷方法:getSceneX(),{ {1}},同样适用于getScreenX()

要回答你的实际问题(虽然我怀疑它是多余的,也许......),你可以创建一个新的属性和#34; animate"那个财产。然后添加一个监听器,并在它发生变化时更新y。此SSCCE演示了这种技术(尽管您可以使用TranslateTransition代替并以完全相同的方式获取鼠标坐标。)

leftAnchor