Created
April 9, 2020 15:18
-
-
Save rah003/f9f78e4b03e1eec52b0ecebdb9d3e932 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 sample; | |
import javafx.animation.AnimationTimer; | |
import javafx.application.Application; | |
import javafx.fxml.FXMLLoader; | |
import javafx.scene.Group; | |
import javafx.scene.Parent; | |
import javafx.scene.Scene; | |
import javafx.scene.layout.AnchorPane; | |
import javafx.scene.layout.BorderPane; | |
import javafx.scene.layout.Pane; | |
import javafx.scene.paint.Color; | |
import javafx.stage.Stage; | |
import javafx.application.Application; | |
import javafx.beans.InvalidationListener; | |
import javafx.beans.Observable; | |
import javafx.beans.property.DoubleProperty; | |
import javafx.beans.property.SimpleDoubleProperty; | |
import javafx.beans.value.ChangeListener; | |
import javafx.beans.value.ObservableValue; | |
import javafx.event.EventHandler; | |
import javafx.geometry.Bounds; | |
import javafx.scene.Scene; | |
import javafx.scene.control.ScrollPane; | |
import javafx.scene.image.Image; | |
import javafx.scene.image.ImageView; | |
import javafx.scene.input.ScrollEvent; | |
import javafx.stage.Stage; | |
public class Main extends Application { | |
//init | |
private ImageView imageView, imageView_dot; | |
private ScrollPane scrollPane; | |
private DoubleProperty zoom; | |
AnchorPane multiple_img = new AnchorPane(); | |
private double x_position = 20; | |
private double xSpeed = 0.1; | |
private double initialZoom = 200; | |
@Override | |
public void start(Stage primaryStage) { | |
zoom = new SimpleDoubleProperty(initialZoom); | |
InvalidationListener listener = new InvalidationListener() { | |
@Override | |
public void invalidated(Observable arg0) { | |
System.out.println("Zoom=" + zoom.doubleValue()); | |
//nastavení šířky a délky pro mapový podklad = imageView | |
imageView.setFitWidth(zoom.get() * 4); | |
imageView.setFitHeight(zoom.get() * 3); | |
//nastavení šířky a délky pro tečku = imageView | |
imageView_dot.setFitWidth(zoom.get() * 2); | |
imageView_dot.setFitHeight(zoom.get() * 1.5); | |
//nastavení pozice obrázku nad podkladu x=10,y=10 (200/20) | |
//imageView_dot.setX(imageView_dot.getX()+10); | |
//imageView_dot.setY(imageView_dot.getY()+10); | |
// TODO: uncomment when done with animation and figured out right equation ... maybe (only if there is ever chance that animation is stopped) | |
// multiple_img.setTopAnchor(imageView_dot, zoom.get()/x_position); | |
// multiple_img.setLeftAnchor(imageView_dot, zoom.get()/x_position); | |
System.out.println("Y"+imageView_dot.getY()); | |
System.out.println(zoom.get()); | |
} | |
}; | |
zoom.addListener(listener); | |
scrollPane = new ScrollPane(); | |
scrollPane.setPannable(true); | |
scrollPane.addEventFilter(ScrollEvent.ANY, | |
new EventHandler<ScrollEvent>() { | |
@Override | |
public void handle(ScrollEvent event) { | |
if (event.getDeltaY() > 0) { | |
zoom.set(zoom.get() * 1.1); | |
} else if (event.getDeltaY() < 0) { | |
if (zoom.get() > 200) | |
zoom.set(zoom.get() / 1.1); | |
} | |
event.consume(); | |
} | |
}); | |
scrollPane.viewportBoundsProperty().addListener( | |
new ChangeListener<Bounds>() { | |
@Override | |
public void changed( | |
ObservableValue<? extends Bounds> bounds, | |
Bounds oldBounds, Bounds newBounds) { | |
System.out.println("oldBounds=" + oldBounds | |
+ " newBounds=" + newBounds); | |
} | |
}); | |
//mapový podklad | |
imageView = new ImageView(new Image(Main.class.getResourceAsStream("img.png"))) { | |
{ | |
setPreserveRatio(true); | |
} | |
}; | |
//podklad pro tečku | |
imageView_dot = new ImageView(new Image(Main.class.getResourceAsStream("circle.jpg"))) { | |
{ | |
setPreserveRatio(true); | |
} | |
}; | |
System.out.println("Initial zoom=" + zoom.get()); | |
//Pane inicializace, obsahuje oba obrázky | |
multiple_img.getChildren().addAll(imageView,imageView_dot); | |
multiple_img.setTopAnchor(imageView_dot, x_position); | |
multiple_img.setLeftAnchor(imageView_dot, 10.0); | |
//scrollPane inicializace, obsahuje multiple_img | |
scrollPane.setContent(multiple_img); | |
Scene scene = new Scene(scrollPane, 2880, | |
1800); | |
scene.setFill(Color.BLACK); | |
primaryStage.setScene(scene); | |
primaryStage.setResizable(false); | |
primaryStage.show(); | |
//nastavení šířky a délky pro mapový podklad = imageView | |
imageView.setFitWidth(zoom.get() * 4); | |
imageView.setFitHeight(zoom.get() * 3); | |
//nastavení šířky a délky pro tečku = imageView | |
imageView_dot.setFitWidth(zoom.get() * 2); | |
imageView_dot.setFitHeight(zoom.get() * 1.5); | |
//nastavení pozice obrázku nad podkladu x=10,y=10 (200/20) | |
//imageView_dot.setX(imageView.getX()+10); | |
//imageView_dot.setY(imageView.getX()+10); | |
System.out.println("X"+imageView_dot.getX()); | |
System.out.println("Y"+imageView_dot.getY()); | |
//nastavení pozic sliderů | |
//scrollPane.setHvalue(scrollPane.getHmax()); | |
//scrollPane.setVvalue(scrollPane.getVmax()); | |
//Timer for dot movement | |
AnimationTimer timer = new AnimationTimer(){ | |
@Override | |
public void handle(long now) { | |
System.out.println("moving diver right"); | |
x_position=x_position+xSpeed; | |
// currentZoom/initZoom ==> zoom factor | |
multiple_img.setTopAnchor(imageView_dot, (zoom.get()/initialZoom)*x_position); | |
} | |
}; | |
timer.start(); | |
} | |
/** | |
* @param args | |
*/ | |
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