Implementierungsschritte: 1. Definieren Sie das FlipView-Objekt. Enthält die folgenden Eigenschaften:
Kopieren Sie den Codecode wie folgt:
//Vorderansicht
öffentlicher Knoten frontNode;
//Rückansicht
öffentlicher Knoten backNode;
//Ob umgedreht werden soll
boolean umgedreht = false;
//Flip-Winkel
DoubleProperty time = new SimpleDoubleProperty(Math.PI / 2);
//Front-Flip-Spezialeffekt
PerspectiveTransform frontEffect = new PerspectiveTransform();
//Reverse-Flip-Spezialeffekt
PerspectiveTransform backEffect = new PerspectiveTransform();
Die Methode create gibt den anzuzeigenden Inhalt zurück:
Kopieren Sie den Codecode wie folgt:
private void create() {
time.addListener(new ChangeListener() {
@Override
public void geändert(ObservableValue<? erweitert Number> arg0,
Zahl arg1, Zahl arg2) {
setPT(frontEffect, time.get());
setPT(backEffect, time.get());
}
});
anim.getKeyFrames().addAll(frame1, frame2);
backNode.visibleProperty().bind(
Bindings.when(time.lessThan(0)).then(true).otherwise(false));
frontNode.visibleProperty().bind(
Bindings.when(time.lessThan(0)).then(false).otherwise(true));
setPT(frontEffect, time.get());
setPT(backEffect, time.get());
frontNode.setEffect(frontEffect);
backNode.setEffect(backEffect);
getChildren().addAll(backNode, frontNode);
}
Im obigen Code ist zu beachten, dass sich mit der Änderung des Zeitwerts auch die Werte von frontEffect und backEffect ändern. 2. Die Implementierung des PerspectiveTransform-Spezialeffekts verwendet die Methoden Math.sin() und Math.cos(), um eine 3D-Winkeltransformation zu simulieren. Die spezifische Implementierung ist wie folgt:
Kopieren Sie den Codecode wie folgt:
private void setPT(PerspectiveTransform pt, double t) {
doppelte Breite = 200;
doppelte Höhe = 200;
doppelter Radius = Breite / 2;
doppelter Rücken = Höhe / 10;
pt.setUlx(radius - Math.sin(t) * radius);
pt.setUly(0 - Math.cos(t) * back);
pt.setUrx(radius + Math.sin(t) * radius);
pt.setUry(0 + Math.cos(t) * back);
pt.setLrx(radius + Math.sin(t) * radius);
pt.setLry(height - Math.cos(t) * back);
pt.setLlx(radius - Math.sin(t) * radius);
pt.setLly(height + Math.cos(t) * back);
}
3. Die Winkeltransformation ändert sich in 1 Sekunde von 3,14/2 auf -3,14/2.
Kopieren Sie den Codecode wie folgt:
KeyFrame Frame1 = neuer KeyFrame(Duration.ZERO, neuer KeyValue(Zeit,
Math.PI / 2, Interpolator.LINEAR));
KeyFrame Frame2 = neuer KeyFrame(Duration.seconds(1),
neuer EventHandler() {
@Override
public void handle(ActionEvent event) {
umgedreht = !umgedreht;
}
}, new KeyValue(time, -Math.PI / 2, Interpolator.LINEAR));
4. Erstellung von FlipView-Objekten: FlipView-Objekte können einfach über den Konstruktor erstellt werden.
Kopieren Sie den Codecode wie folgt:
ImageView image1 = new ImageView(new Image(getClass())
.getResourceAsStream("lion1.png")));
ImageView image2 = new ImageView(new Image(getClass())
.getResourceAsStream("lion2.png")));
FlipView flip = new FlipView(image1, image2);
5. Rendering: