0

我已经很久没来了,当然直到现在。

问题是,有一段代码我拼命想让它工作:

private Timeline timeline = createTimeline();
timeline.play();
public Timeline createTimeline() {
Timeline timeline = new Timeline();
timeline.setDelay(new Duration(1000));
timeline.getKeyFrames().addAll(
        new KeyFrame(Duration.ZERO, new KeyValue(imageProperty(), moveOneStep())),
        new KeyFrame(new Duration(250), new KeyValue(imageProperty(), moveOneStep())));
timeline.setCycleCount(Timeline.INDEFINITE);
return timeline;
}
public Image moveOneStep() {
    return getNextImage();
}
private Image getNextImage() {
    imgCount++;
    if (imgCount > 2)
        imgCount %= 3;
    return images[imgCount];
}

问题是,虽然我已经尝试在关键帧之前和之后将循环计数设置为无限期,但它似乎根本没有重复。我对此有点困惑。

提前致谢。

4

1 回答 1

1

看来您需要定义一个“关闭关键帧”,以便可以播放最后一个关键帧之前的关键帧。我怀疑,这是“设计”还是错误。

timeline.getKeyFrames().addAll(
        new KeyFrame(Duration.ZERO, new KeyValue(imageProperty(), moveOneStep())),
        new KeyFrame(new Duration(250), new KeyValue(imageProperty(), moveOneStep())),
        new KeyFrame(new Duration(500));

您可以使用 ChangeListener 跟踪任何属性的更改,例如:

imageProperty().addListener(new ChangeListener<Image>() {
    @Override
    public void changed(ObservableValue<? extends Image> observable, Image oldValue, Image newValue) {
        System.out.println("imageProperty oldValue " + oldValue);
        System.out.println("imageProperty newValue " + newValue);
        System.out.println("");
    }
});
于 2013-06-05T14:49:28.123 回答