我如何才能知道是否已存在的节点上运行的过渡-例如FadeTransition
?
Answer 1:
您可以随时使用过渡 statusProperty因为转型扩展动画对象。 无需另外一个变量,你可以简单地说:
FadeTransition fade = new FadeTransition()
fade.statusProperty().addListener(new ChangeListener<Status>() {
@Override
public void changed(ObservableValue<? extends Status> observableValue,
Status oldValue, Status newValue) {
if(newValue==Status.RUNNING)
System.out.println("Animation is still running");
}
});
fade.play();
我假设你将跟踪所有的动画,我不相信有一种方法可以让一个节点,如果它在一个动画。 无论如何,你可能要检查的文档节点类,因为它是一个非常强大的对象。 我希望它帮助,欢呼声
Answer 2:
注:我没有尝试过任何自己与此有关。 这更是一个草图比的解决方案。 太长了评论,这就是为什么我在这里写出了大纲。
在我看来,您可以创建与节点(“transitionPlaying”),并且每一个过渡将其设置为true时节点上启动时间相关联的布尔值。
然后,每个转换定义,当它完成一个行为:
yourTransition.setOnFinished(new EventHandler<ActionEvent>(){
public void handle(ActionEvent AE){
transitionPlaying = false;
}
请注意,这只是回答您的最基本的question-这是很难写什么更多的,因为我不知道为什么你想知道的过渡是否完成(如果你想在过渡完成后做的东西,打开一整蠕虫可以。也许,如果过渡播放,你可以添加你想要运行到一个队列,然后定义setOnFinished调用的时候它完成队列中的下一个过渡的一个转变。)
PS。 该解决方案具有至多一个过渡可以在任何时刻一个节点上播放的限制。
更新找到一个节点上的所有转换是否完成
你可以使用int,而不是一个布尔值,并为每一个转型开始由你,计数器增加一,当它完成后,你减一了。 你知道这样,当计数器读“0”的所有过渡完成。 这样,我的解决方案解决了会心一节点上的所有转换是否完成的问题。
Answer 3:
谢谢您的帮助。 我想分享我终于choosen我的具体问题的解决方案。 它的下面:我想褪色的鼠标点击一个节点。 当大量点击的出现,一个新的FadeTransition
在当前一个结束,以防止闪烁等现象应该只是开始。
我的做法可以看出,在该函数的第一行:
@FXML
public void chartMouseClicked(MouseEvent event){
if (ft.getCurrentRate()!=0.0d) return;
ft.play();
}
在这种情况下, ft
是所述类型的私有字段FadeTransition
其被一个“初始化”功能中被实例化一次。 根据JavaFX的文档, getCurrentRate()
返回0.0
当过渡暂停或停止。 我不需要暂停过渡,所以这是去我的方式 - 我只是检查的价值,并让当它停在我的转变再次发挥。