Ваш подход к использованию временной шкалы для изменения свойства изображения является правильным, но ваша длительность неверна.
Вы используете Duration.ONE , что:
A Длительность 1 миллисекунда.
Так что это не каждые N секунд, как вы sh.
Чтобы получать каждые 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+.