我正在使用JavaFX和Scene Builder创建一个应用程序。我有一种制作锚定窗格动画的方法。平移过渡和旋转过渡。
当我在键盘上按“ 1”时,将调用该方法。
问题是当我按键1时,快速动画有效 错误地。似乎当我对以下内容的关键动画按得太快时 锚定窗格已移动。
如何在动画播放期间禁止按键或如何设置按键之间的延迟?
控制器:
@FXML private AnchorPane randomCard;
@FXML public void initialize(URL location, ResourceBundle resources) {
//key commands
mainAnchor.setOnKeyPressed(event -> {
switch (event.getCode()) {
case DIGIT1:
showRandomCard();
break;
}
});
//show random card in main window
private void showRandomCard(){
TranslateTransition tt = new TranslateTransition();
tt.setDuration(Duration.millis(400));
tt.setNode(randomCard);
tt.setFromY(950);
tt.setFromX(-600);
tt.setToY(0);
tt.setToX(0);
RotateTransition rt = new RotateTransition(Duration.millis(500), randomCard);
rt.setByAngle(360);
rt.setRate(1);
rt.setCycleCount(1);
tt.play();
rt.play();
}
答案 0 :(得分:1)
只需使用boolean
字段并使用最后完成的动画的onFinished
处理程序即可将其重置为允许执行创建/开始动画的逻辑的状态:
private boolean animationRunning = false;
private void showRandomCard(){
if (!animationRunning) {
animationRunning = true;
TranslateTransition tt = new TranslateTransition();
tt.setDuration(Duration.millis(400));
tt.setNode(randomCard);
tt.setFromY(950);
tt.setFromX(-600);
tt.setToY(0);
tt.setToX(0);
RotateTransition rt = new RotateTransition(Duration.millis(500), randomCard);
rt.setByAngle(360);
rt.setRate(1);
rt.setCycleCount(1);
rt.setOnFinished(evt -> animationRunning = false);
tt.play();
rt.play();
}
}