【问题标题】:How can I make the image change every n second如何使图像每 n 秒更改一次
【发布时间】:2020-01-09 02:52:20
【问题描述】:

这是我的代码

    ImageView contImg = new ImageView();
    Timeline timeline = new Timeline(
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(0).getImg())),
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(1).getImg())),
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(2).getImg())),
    new KeyFrame(javafx.util.Duration.ONE, new KeyValue(contImg.imageProperty(), cartas.get(3).getImg())));

    timeline.play();

但问题是图像不会改变 (cartas 是一个 Arraylist,其中每个购物车都有一个 image how 属性)

【问题讨论】:

标签: java javafx


【解决方案1】:

您使用时间轴更改图像的图像属性的方法是正确的,但您的持续时间是错误的。

你使用Duration.ONE,即:

1 毫秒的持续时间。

所以这不是你希望的每 N 秒一次。

要每 n 秒获取一次,请使用:

Duration.seconds(n)

另一个问题是您将关键帧设置为在相同的持续时间内全部触发,这不是您想要的。关键帧的持续时间基于整个时间线周期所经过的时间,而不仅仅是从上一个关键帧开始。

所以把这些放在一起你可以得到下面的代码来做你想做的事:

final int NUM_FRAMES = 4;
final int PAUSE_BETWEEN_FRAMES = 5;

ImageView imageView = new ImageView();
Timeline timeline = new Timeline();
List<Image> images = List.of(/** initialize your images here **/);

for (int i = 0; i < NUM_FRAMES; i++) {
    timeline.getKeyFrames().add(
        new KeyFrame(
            Duration.seconds(i * PAUSE_BETWEEN_FRAMES), 
            new KeyValue(imageView.imageProperty(), images.get(i))
        )
    );
}

timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();

List.of(elements..) 是用于初始化列表的 Java 9 构造,如果您不使用 Java 9+,请使用其他构造。

【讨论】:

  • 我知道你的意思很好,但请不要叫我兄弟,我只是不喜欢这种俚语,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-03-16
  • 2017-11-11
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多