У меня есть список изображений, и я не могу воспроизвести их в обратном порядке, сначала он прокручивается справа налево, а затем автоматически поворачивается слева направо. Таким образом, я могу воспроизвести первую анимацию, затем воспроизвести 2-ю анимацию, затем воспроизвести 2-ю анимацию назад и достичь положения, как после воспроизведения только первой анимации.
1
Моя проблема в том, что я не могу повернуть анимацию после ее завершения. Я знаю, что могу установить autoReverse, но тогда каждая анимация будет сразу же изменяться.
package com.valid;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javafx.animation.Animation;
import javafx.animation.FadeTransition;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Only extends Application {
class SimpleSlideShow {
StackPane root = new StackPane();
ImageView[] slides;
public SimpleSlideShow() {
this.slides = new ImageView[4];
Image image1 = new Image(Only.class.getResource("res/Pic1.jpg").toExternalForm());
Image image2 = new Image(Only.class.getResource("res/Pic2.jpeg").toExternalForm());
Image image3 = new Image(Only.class.getResource("res/Pic3.jpeg").toExternalForm());
Image image4 = new Image(Only.class.getResource("res/Pic4.jpeg").toExternalForm());
slides[0] = new ImageView(image1);
slides[1] = new ImageView(image2);
slides[2] = new ImageView(image3);
slides[3] = new ImageView(image4);
}
public StackPane getRoot() {
return root;
}
public ImageView[] getImageView() {
return slides;
}
public void start() {
this.root.getChildren().add(slides[0]);
// slide.setOpacity(0);
Timeline timeline = new Timeline();
List<Animation> anm = new ArrayList<>(4);
for (int i = 0; i < slides.length; i++) {
TranslateTransition tts = new TranslateTransition(Duration.millis(3000));
anm.add(tts);
int dam= i >> 1;
if ((i & 1)==0) {
tts.setFromY(dam*10);
tts.setToY((dam+1)*10);
} else {
tts.setFromX(dam*10);
tts.setToX((dam+1)*10);
}
}
KeyValue kv = new KeyValue(slides[0].translateXProperty(), 0, Interpolator.EASE_IN);
KeyFrame kf = new KeyFrame(Duration.seconds(2), kv);
timeline.getKeyFrames().add(kf);
timeline.setAutoReverse(true);
timeline.setOnFinished(t -> {
this.root.getChildren().addAll(slides[1], slides[2], slides[3]);
});
timeline.play();
}
public FadeTransition getFadeTransition(ImageView imageView, double fromValue, double toValue,
int durationInMilliseconds) {
// SequentialTransition slide = new SequentialTransition();
// slide.setCycleCount(2);
// slide.autoReverseProperty();
// slide.setAutoReverse(true);
FadeTransition ft = new FadeTransition(Duration.seconds(3), imageView);
ft.setFromValue(fromValue);
ft.setToValue(toValue);
return ft;
}
}
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
SimpleSlideShow simpleSlideShow = new SimpleSlideShow();
Scene scene = new Scene(simpleSlideShow.getRoot());
primaryStage.setScene(scene);
primaryStage.setMaximized(true);
primaryStage.show();
simpleSlideShow.getImageView()[0].translateXProperty().set(scene.getWidth());
simpleSlideShow.start();
}
}
Я хочу, чтобы мои слайды менялись автоматически после скольжения, но мой код не работает должным образом