Last active
August 29, 2015 14:22
-
-
Save jokandre/edd0ef0d1607e546f2d8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.sriram.slider; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| import javafx.animation.Interpolator; | |
| import javafx.animation.KeyFrame; | |
| import javafx.animation.Timeline; | |
| import javafx.animation.TranslateTransition; | |
| import javafx.application.Application; | |
| import static javafx.application.Application.launch; | |
| import javafx.event.ActionEvent; | |
| import javafx.event.EventHandler; | |
| import javafx.scene.Scene; | |
| import javafx.scene.image.Image; | |
| import javafx.scene.image.ImageView; | |
| import javafx.scene.layout.HBox; | |
| import javafx.scene.layout.Pane; | |
| import javafx.scene.layout.StackPane; | |
| import javafx.scene.shape.Rectangle; | |
| import javafx.stage.Stage; | |
| import javafx.util.Duration; | |
| public class ImageSliderApp extends Application { | |
| // Width and height of image in pixels | |
| private final double IMG_WIDTH = 600; | |
| private final double IMG_HEIGHT = 300; | |
| private final int NUM_OF_IMGS = 3; | |
| private final int SLIDE_FREQ = 4; // in secs | |
| @Override | |
| public void start(Stage stage) throws Exception { | |
| StackPane root = new StackPane(); | |
| Pane clipPane = new Pane(); | |
| // To center the slide show incase maximized | |
| clipPane.setMaxSize(IMG_WIDTH, IMG_HEIGHT); | |
| clipPane.setClip(new Rectangle(IMG_WIDTH, IMG_HEIGHT)); | |
| HBox imgContainer = new HBox(); | |
| ImageView imgGreen = new ImageView(new Image(getClass().getResourceAsStream("/images/img1.jpg"))); | |
| ImageView imgBlue = new ImageView(new Image(getClass().getResourceAsStream("/images/img2.jpg"))); | |
| ImageView imgRose = new ImageView(new Image(getClass().getResourceAsStream("/images/img3.jpg"))); | |
| imgContainer.getChildren().addAll(imgGreen, imgBlue, imgRose); | |
| clipPane.getChildren().add(imgContainer); | |
| root.getChildren().add(clipPane); | |
| Scene scene = new Scene(root, IMG_WIDTH, IMG_HEIGHT); | |
| stage.setTitle("Image Slider"); | |
| stage.setScene(scene); | |
| startAnimation(imgContainer); | |
| stage.show(); | |
| } | |
| private void startAnimation(final HBox hbox) { | |
| EventHandler<ActionEvent> slideAction = (ActionEvent t) -> { | |
| TranslateTransition trans = new TranslateTransition(Duration.seconds(1.5), hbox); | |
| trans.setByX(-IMG_WIDTH); | |
| trans.setInterpolator(Interpolator.EASE_BOTH); | |
| trans.play(); | |
| }; | |
| EventHandler<ActionEvent> resetAction = (ActionEvent t) -> { | |
| TranslateTransition trans = new TranslateTransition(Duration.seconds(1), hbox); | |
| trans.setByX((NUM_OF_IMGS - 1) * IMG_WIDTH); | |
| trans.setInterpolator(Interpolator.EASE_BOTH); | |
| trans.play(); | |
| }; | |
| List<KeyFrame> keyFrames = new ArrayList<>(); | |
| for (int i = 1; i <= NUM_OF_IMGS; i++) { | |
| if (i == NUM_OF_IMGS) { | |
| keyFrames.add(new KeyFrame(Duration.seconds(i * SLIDE_FREQ), resetAction)); | |
| } else { | |
| keyFrames.add(new KeyFrame(Duration.seconds(i * SLIDE_FREQ), slideAction)); | |
| } | |
| } | |
| Timeline anim = new Timeline(keyFrames.toArray(new KeyFrame[NUM_OF_IMGS])); | |
| anim.setCycleCount(Timeline.INDEFINITE); | |
| anim.playFromStart(); | |
| } | |
| public static void main(String[] args) { | |
| launch(args); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment