JavaFX: so erstellen Sie slide in animation-Effekt für einen Bereich (innerhalb einer transparenten Bühne)
Möchte ich einige Leitlinien auf, wie die Umsetzung einer Folie im übergang zu einem Bereich, wenn der Benutzer eine Taste drückt, genau wie Material-Design macht es für Schiebe-Menüs.
Dies ist ein video link , zeigt mein Bedürfnis.
Versuchte ich ScaleTransition, TranslateTransition, aber Sie hat nicht den trick tun.
Den Weg, ich versuche es zu implementieren, ist nicht effizient.
//swipeMenuPane is builded in SceneBuilder and it is hidden,
//opacity = 0.0 and setX() = -getPrefWidth();
@FXML AnchorPane swipeMenuPane;
@FXML Button menuButton;
menuButton.setOnMouseClicked(e-> {
swipeMenuPane.setOpacity(1.0);
swipeTransition.play()
});
TranslateTransition swipeTransition = new TranslateTransition();
swipeTransition.setNode(swipeMenuPane);
swipeTransition.setDuration(Duration.millis(500));
swipeTransition.setToX(swipeMenuPane.getPrefWidth());
- - - - UPDATE ---
Hier ist das Beispiel-Gluon-Anwendung heruntergeladen hier. Es ist ein gradle-Projekt und ich habe es geändert, um eine Schaltfläche anzuzeigen, anstatt die Standard-label.
Möchte ich verkleinern, das AnchorPane, wenn der Benutzer auf die Schaltfläche klickt.
Was bin ich?
package com.helloworld;
import com.gluonhq.charm.glisten.animation.ShrinkExpandAnimation;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloWorld extends Application {
ShrinkExpandAnimation anim;
@Override
public void start(Stage stage) {
Button btn = new Button("Click Me!");
btn.setOnMouseClicked(e-> {
System.out.println("swiping...");
anim.play();
});
AnchorPane pane = new AnchorPane();
pane.setStyle("-fx-background-color: coral");
pane.getChildren().add(btn);
//false to shrink or true to expand
anim = new ShrinkExpandAnimation(pane, false);
Scene scene = new Scene(new StackPane(pane), 640, 480);
stage.setScene(scene);
stage.show();
}
}
--- UPDATE 2 ---
Habe ich es geschafft, etwas neues zu implementieren, ähnlich zu dem, was ich will, mit " native JavaFX-API und keine externen Bibliotheken.
Obwohl, ich lief in einige Probleme.
- Verkleinern einer AnchorPane NICHT schrumpfen/verschieben Sie ALLE seine Kinder-Knoten, weil Sie bleiben in den layout-Positionen.
- Schrumpfen jedem anderen Bereich außer AnchorPane NICHT verkleinern/verschieben-seine Kinder-Knoten mit Ausnahme von Bildansicht Knoten.
Die nächsten zwei Bilder zeigen die 1. Frage, die ich lief in.
Dies ist ein AnchorPane (mit Korallen Farbe in Ihrer vollen Breite, ausgebaut) in einer AnchorPane (root-Bereich mit grauer Farbe).
Und dies ist, was passiert, wenn Sie klicken Sie auf die Menü-Taste zum verkleinern/verstecken. Wie Sie sehen können die Koralle-farbigen Bereich bekam geschrumpft/ausgeblendet, NICHT aber deren Knoten (Label, Bildansicht)
Poste ich den ganzen code um das Problem zu reproduzieren selbst:
public class SwipeMenuDemo extends Application {
AnchorPane swapPane;
Button btnMenu;
boolean isExpanded = true;
@Override
public void start(Stage stage) {
Label swapPaneLabel = new Label("Expandable Pane");
swapPaneLabel.setMinWidth(0);
ImageView swapPaneImage = new ImageView("http://vignette1.wikia.nocookie.net/jfx/images/5/5a/JavaFXIsland600x300.png");
swapPaneImage.setLayoutY(100);
Label rootPaneLabel = new Label("Root Pane");
rootPaneLabel.setStyle("-fx-font-size: 60;");
rootPaneLabel.setLayoutX(180);
rootPaneLabel.setLayoutY(180);
swapPane = new AnchorPane();
swapPane.setPrefSize(640, 440);
swapPane.setMinWidth(0);
swapPane.setLayoutY(40);
swapPane.setStyle("-fx-background-color: coral; -fx-font-size: 52;");
swapPane.getChildren().addAll(swapPaneImage, swapPaneLabel);
btnMenu = new Button("Menu");
btnMenu.setLayoutX(5);
btnMenu.setLayoutY(5);
btnMenu.setOnMouseClicked(e -> {
if (isExpanded) hideSwapPane().play();
else showSwapPane().play();
});
Button btnClose = new Button("Close");
btnClose.setLayoutX(590);
btnClose.setLayoutY(5);
btnClose.setOnMouseClicked(e -> Platform.exit());
AnchorPane rootPane = new AnchorPane();
rootPane.setStyle("-fx-background-color: grey;");
rootPane.getChildren().addAll(btnMenu, btnClose, rootPaneLabel, swapPane);
Scene scene = new Scene(rootPane, 640, 480);
stage.setScene(scene);
stage.initStyle(StageStyle.UNDECORATED);
stage.show();
}
private Animation hideSwapPane() {
btnMenu.setMouseTransparent(true);
Animation collapsePanel = new Transition() {
{
setCycleDuration(Duration.millis(2500));
}
@Override
protected void interpolate(double fraction) {
swapPane.setPrefWidth(640 * (1.0 - fraction));
}
};
collapsePanel.setOnFinished(e-> {
isExpanded = false;
btnMenu.setMouseTransparent(false);
});
return collapsePanel;
}
private Animation showSwapPane() {
btnMenu.setMouseTransparent(true);
final Animation expandPanel = new Transition() {
{
setCycleDuration(Duration.millis(2500));
}
@Override
protected void interpolate(double fraction) {
swapPane.setPrefWidth(640 * fraction);
}
};
expandPanel.setOnFinished(e-> {
isExpanded = true;
btnMenu.setMouseTransparent(false);
});
return expandPanel;
}
}
--- UPDATE 3 ---
Ich veränderte den code Felipe Guizar Diaz, geben Sie mir, nach meinen Bedürfnissen, da ich möchte, dass ein Schlagschatten-Effekt auf meine transparente Bühne Fenster.
Wenn ich auf die Menü-Taste, um den linken Bereich, es zeigt sich vor dem Schatten. Obwohl in SceneBuilder ich habe die StackPane mit dem Schlagschatten-Effekt, der vor allen Knoten.
Dies ist das "Artefakt", wenn ich drücken Sie, um das Menü anzuzeigen, und startet die Wiedergabe der offene übergang...
Wie kann ich es beheben?
Vielleicht suchst du nach so etwas wie ein HiddenSidesPane? Schau mal hier: fxexperience.com/controlsfx/features/#hiddensidespane
Ja, aber in meinem Fall möchte ich den Bereich zum anzeigen/Folie auf ein Maus-Ereignis. Haben, kam man auf so etwas?
Hm, vielleicht wollen Sie so etwas wie die material-design von android-apps? Dann wahrscheinlich Gluon-Charme ist das, was Sie suchen.
Wenn ich nur könnte die Umsetzung der gleichen animation auf meiner eigenen. Ich schaute auf ähnliche codes, aber Sie passen nicht in meinem Fall (nehme ich an). Den Bereich möchte ich Folie bedecken die ganze Bühne. Es ist einfach wie das öffnen einer Schublade, und schließen Sie es dann wieder. Könnte mir bitte jemand irgendwelche Leitlinien oder Schritte zu prüfen, um durch?
InformationsquelleAutor John Astralidis | 2015-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin der Autor des Beispiel-video. Ich wiederhole die Antwort, die ich habe in die video-Kommentare:
"Sie sollten denken, es als navigation drawer in android navigation drawer in JavaFX wäre eine
AnchorPane
mit 2 Kinder, zuerst einStackPane
das entspricht einemFrameLayout
arbeiten als unsere wichtigsten Inhalte, wobei die übergänge von Bereich gemacht werden, je nach dem gewählten Element aus dem Menü auf der linken Seite, und letztlich eineListView
unsere linke Seite Menü mit einem negativentranslateX
dass gleich derListview
Breite. Dann, wenn der Benutzer drückt eine Taste, die Sie spielen müssen eine animation, sest der WerttranslateX
zu0
."Sie sollten nicht
prefWidth()
in der interpolate-Methode der beiden Animationen (Kollaps-Panel, erweitern Sie Bereich), weil die Kinder nicht die Größe ändern, die Marge Anordnung ist die einzige Einschränkung, dass dasAnchorPane
hat.Schauen Sie sich dieses Beispiel, das ich habe.
https://github.com/marconideveloper/leftsidemenuexample
Hier ist der fxml:
Ich veränderte Sie Ihren code, um einen Schlagschatten-Effekt in meine Stufe, aber es ist ein Artefakt.Könnten Sie bitte einen Blick in das obige Bild?
Gut, wenn Sie mit einem Schlagschatten erstellt einen Rand, es ist der Grund, wodurch angezeigt wird, ist der nav vor, Schlagschatten, sollte man die Wirkung in der Wurzel anchorpane und legen Sie einen clip, check setclip-Methode in der Knoten-Klasse von javafx-Dokumentation.
Ich verstehe nicht ganz, was du meinst. Die Wurzel anchorpane Größe 500x500px (mit Schatten-Effekt auf 10px Schatten der Breite) , also ich erstelle ein Rechteck clip 500x500px. Aber, dass Pflanzen, die Schatten zu. Wie kann es getan werden?
InformationsquelleAutor Felipe Guizar Diaz
Schließlich habe ich es getan.
Die Hauptmerkmale sind:
Unten ist ein Ausschnitt aus dem source-code, der steuert diese Effekte:
Slide Menü halb geöffnet
Slide Menü vollständig geöffnet
Slide Menü geschlossen
InformationsquelleAutor John Astralidis