Мне нужны слайды изображений справа налево, затем они меняются слева направо с использованием представлений изображений JavaFX.
Мне нужны слайды этого типа:
Вот мой код, который не дает мне точных результатов. Он скользит слева направо.
Только. java:
package com.valid;
import javafx.animation.FadeTransition;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.SequentialTransition;
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.BorderPane;
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();
// TranslateTransition tts= new TranslateTransition(Duration.millis(3000));
slides[0].translateXProperty().set(-1*root.getWidth());
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 void leftToRight(){
this.root.getChildren().add(slides[0]);
// slide.setOpacity(0);
Timeline timeline = new Timeline();
// TranslateTransition tts= new TranslateTransition(Duration.millis(3000));
KeyValue kv = new KeyValue(slides[0].translateXProperty(), 0, Interpolator.EASE_IN);
slides[0].translateXProperty().set(-1*root.getWidth());
KeyFrame kf = new KeyFrame(Duration.seconds(2), kv);
timeline.getKeyFrames().add(kf);
timeline.setAutoReverse(true);
timeline.setOnFinished(t -> {
this.root.getChildren().addAll(slides[1]);
});
timeline.play();
/*SequentialTransition st = new SequentialTransition();
for (ImageView sl : slides) {
this.root.getChildren().add(slides[0]);
slides[0].translateXProperty().add(root.getScene().getHeight());*/
}
}
}
/*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();
simpleSlideShow.leftToRight();
}
}