Hallo liebe Community,
ich versuche in einer JavaFX Applikation einen Hover-Effekt und einen Transition-Effekt auf Image-Views umzusetzen.
Dabei soll, wie in vielen Computer-Kartenspielen, die Karte größer werden, sobald man mit der Maus darauf fährt und wieder kleiner werden, wenn die Maus das Objekt verlässt. Allerdings möchte ich zusätzlich noch die Karte um eine Kartenlänge nach oben bewegen (und dann natürlich wieder zurück).
Allerdings kann die Animation unterbrochen werden und somit die Karte unterschiedlich hoch verschoben werden. Dieser Effekt ist nicht erwünscht, allerdings ist mir noch keine Idee gekommen, wie ich das Verhindern könnte.
Mein Code:
Vielleicht kann mir jemand helfen, das Problem aufzulösen und vielleicht den Code noch vereinfachen.
Vielen Dank schon einmal im Voraus
ich versuche in einer JavaFX Applikation einen Hover-Effekt und einen Transition-Effekt auf Image-Views umzusetzen.
Dabei soll, wie in vielen Computer-Kartenspielen, die Karte größer werden, sobald man mit der Maus darauf fährt und wieder kleiner werden, wenn die Maus das Objekt verlässt. Allerdings möchte ich zusätzlich noch die Karte um eine Kartenlänge nach oben bewegen (und dann natürlich wieder zurück).
Allerdings kann die Animation unterbrochen werden und somit die Karte unterschiedlich hoch verschoben werden. Dieser Effekt ist nicht erwünscht, allerdings ist mir noch keine Idee gekommen, wie ich das Verhindern könnte.
Mein Code:
Code:
ImageView b = new ImageView(img2);
b.setFitHeight(120);
b.setFitWidth(80);
b.setOnMouseEntered(event -> {
ScaleTransition scaleTransition = new ScaleTransition(Duration.millis(500),b);
scaleTransition.setFromX(1.0);
scaleTransition.setToX(1.1);
scaleTransition.setFromY(1.0);
scaleTransition.setToY(1.1);
scaleTransition.setAutoReverse(false);
scaleTransition.setCycleCount(1);
TranslateTransition translateTransition = new TranslateTransition(Duration.millis(500), b);
translateTransition.setByY(- b.getFitHeight() - 10);
translateTransition.setAutoReverse(false);
translateTransition.setCycleCount(1);
ParallelTransition parallelTransition = new ParallelTransition(scaleTransition,translateTransition);
parallelTransition.play();
});
b.setOnMouseExited(event -> {
ScaleTransition scaleTransition = new ScaleTransition(Duration.millis(500),b);
scaleTransition.setFromX(1.1);
scaleTransition.setToX(1.0);
scaleTransition.setFromY(1.1);
scaleTransition.setToY(1.0);
scaleTransition.setAutoReverse(false);
scaleTransition.setCycleCount(1);
TranslateTransition translateTransition = new TranslateTransition(Duration.millis(500), b);
translateTransition.setByY(b.getFitHeight() + 10);
translateTransition.setAutoReverse(false);
translateTransition.setCycleCount(1);
ParallelTransition parallelTransition = new ParallelTransition(scaleTransition,translateTransition);
parallelTransition.setDelay(Duration.millis(2000));
parallelTransition.play();
});
b.setOnMouseDragEntered(event -> {
Dragboard db = b.startDragAndDrop(TransferMode.ANY);
ClipboardContent content = new ClipboardContent();
content.putImage(img2);
db.setContent(content);
event.consume();
});
movementCardsHBox.getChildren().add(b);
Vielleicht kann mir jemand helfen, das Problem aufzulösen und vielleicht den Code noch vereinfachen.
Vielen Dank schon einmal im Voraus