Skip to content

Instantly share code, notes, and snippets.

@rah003
Created April 9, 2020 15:18
Show Gist options
  • Save rah003/f9f78e4b03e1eec52b0ecebdb9d3e932 to your computer and use it in GitHub Desktop.
Save rah003/f9f78e4b03e1eec52b0ecebdb9d3e932 to your computer and use it in GitHub Desktop.
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