我一直在写一种切换两个图像的方法。在鼠标拖放事件中调用此方法,然后再执行另一种方法,该方法可以使图像下降几个位置(我说的是一种糖果挤压机制)。 就我而言,第二种方法的转换是在切换完成之前开始的,这就是为什么您几乎看不到切换的原因。 我正在寻找的是一种使程序等到第一个转换完成后才进入下一个方法的方法。 Thread.sleep()对我不起作用,因为它也会停止切换动画,而且我不知道如何在我的switch方法中正确使用transition.setOnFinished()而不引起无限循环。
这是我的切换方法的一部分:
public void animateSwitch(int xFirst, int yFirst, int xLast, int yLast) {
/ ... /
ParallelTransition allMovements = new ParallelTransition();
TranslateTransition tt = new TranslateTransition(Duration.millis(FALL_TIME_PER_ROW), getNodeFromGridPane(grdPane, xFirst, yFirst));
TranslateTransition tt2 = new TranslateTransition(Duration.millis(FALL_TIME_PER_ROW), getNodeFromGridPane(grdPane, xLast, yLast));
Image old = iv1.getImage();
iv1.setImage(iv2.getImage());
iv1.setTranslateX(iv2.getX());
iv1.setTranslateY(iv2.getY());
iv2.setImage(old);
iv2.setTranslateX(iv1.getX());
iv2.setTranslateY(iv1.getY());
if (xFirst == xLast) {
tt.toYProperty().set(0);
tt.toXProperty().set(tt.getFromX());
if (yFirst < yLast) {
tt.fromYProperty().set(rowHeight);
tt2.fromYProperty().set(-rowHeight);
}
else {
tt.fromYProperty().set(-rowHeight);
tt2.fromYProperty().set(rowHeight);
}
tt2.toYProperty().set(0);
tt2.toXProperty().set(tt2.getFromX());
}
else if (yFirst == yLast) {
tt.toXProperty().set(0);
tt.toYProperty().set(tt.getFromY());
if (xFirst < xLast) {
tt.fromXProperty().set(rowWidth);
tt2.fromXProperty().set(-rowWidth);
}
else {
tt.fromXProperty().set(-rowWidth);
tt2.fromXProperty().set(rowWidth);
}
tt2.toXProperty().set(0);
tt2.toYProperty().set(tt2.getFromY());
}
allMovements.getChildren().add(tt);
allMovements.getChildren().add(tt2);
allMovements.play();
}
谢谢!
答案 0 :(得分:0)
您将必须使用allMovements.setOnFinished(eventHandler);
来设置onFinished事件处理程序。这里的eventHandler
是实现EventHandler
接口的对象。
编辑: 我跳过了您不知道如何使用此解决方案防止无限循环的部分。您可以使用两个不同的eventHandlers来完成不同的部分。完成时,第一个调用第二个。第二个不需要调用第一个,因此您不会陷入循环。