动画(时间轴)播放问题

Animation (timeline) playing issue

我已经创建了一个时间轴对象,它应该通过交替其可见属性使标签闪烁,但这不起作用。当您在我的代码示例中按下按钮时,时间线应该开始播放。谁能帮我解决这个问题?

@Override
public void start(Stage primaryStage) {
    Label lbl = new Label("label");
    Button btn = new Button("play");

    btn.setOnAction(event -> {
        //create timeline
        KeyValue keyValue = new KeyValue(lbl.visibleProperty(), false);
        KeyFrame keyFrame = new KeyFrame(Duration.seconds(0.5), keyValue);
        Timeline timeline = new Timeline(keyFrame);
        timeline.setCycleCount(6);
        timeline.setAutoReverse(true);
        timeline.play();
    });
    VBox pane = new VBox(lbl, btn);
    pane.setAlignment(Pos.CENTER);
    Scene sc = new Scene(pane, 200, 200);
    primaryStage.setScene(sc);
    primaryStage.show();
}

插值 Boolean 是有问题的,因为动画跳到最终结果,如果动画到达一个点,到最后的时间差非常小,它被认为是零。在这种情况下,这会导致问题。

你当然可以在这里使用 3 个 KeyFrame,但更简单的方法是简单地使用 EventHandler 来否定每个 visible 属性执行时间:

btn.setOnAction(event -> {
    // create timeline
    Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0.25), evt -> {
        lbl.setVisible(!lbl.isVisible());
    }));
    timeline.setCycleCount(6);
    timeline.play();
});