如何判断节点上是否已经有转换运行 - 例如FadeTransition
?
答案 0 :(得分:3)
您可以随时使用Transition statusProperty,因为Transition会扩展Animation对象。不需要另一个变量,你可以简单地说:
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();
我假设您将跟踪所有动画,我不相信有一种方法可以询问节点是否在动画中。无论如何,您可能想查看Node类的文档,因为它是一个非常强大的对象。我希望它有所帮助,欢呼
答案 1 :(得分:1)
注意:我自己没有尝试过与此相关的任何事情。这更像是草图而不是解决方案。评论太长了,这就是我在这里写大纲的原因。
在我看来,您可以创建一个与节点关联的布尔值(“transitionPlaying”),每次在节点上启动转换时,都会将其设置为true。
然后,对于每个转换,您在完成时定义行为:
yourTransition.setOnFinished(new EventHandler<ActionEvent>(){
public void handle(ActionEvent AE){
transitionPlaying = false;
}
请注意,这只是回答你最基本的问题 - 很难写更多内容,因为我不知道为什么你想知道转换是否已经完成(如果你想在转换完成后做一些事情,那就是打开一大堆蠕虫。也许如果正在进行转换,您可以将要运行的下一个转换添加到队列中,然后定义setOnFinished以在完成时调用队列中的下一个转换。)
聚苯乙烯。此解决方案的限制是,任何时刻最多只能有一个转换在节点上播放。
更新以查找节点上的所有转场是否已完成
您可以使用int而不是bool,并且对于每个开始的转换,您将计数器递增1,当它完成时,您将其递减1。这样,您就知道当计数器读为“0”时,所有转换都会完成。这样我的解决方案就可以解决知道节点上所有转换是否完成的问题。
答案 2 :(得分:0)
感谢您的帮助。我想分享我最后为我的具体问题选择的解决方案。它的内容如下:我想在鼠标点击时淡化节点。当出现大量点击时,新的FadeTransition
只应在当前的点击完成时开始,以防止闪烁或其他现象。
我的方法可以在函数的第一行看到:
@FXML
public void chartMouseClicked(MouseEvent event){
if (ft.getCurrentRate()!=0.0d) return;
ft.play();
}
在这种情况下,ft
是FadeTransition
类型的私有字段,它在“init”函数中实例化一次。根据JavaFX文档,当转换暂停或停止时,getCurrentRate()
会返回0.0
。我不需要暂停转换,所以这是我的选择 - 我只是检查价值,让我的转换在停止时再次播放。