Langkah-langkah implementasi: 1. Definisikan objek FlipView. Berisi properti berikut:
Copy kode kodenya sebagai berikut:
//Tampilan depan
Node depan Node publik;
//tampilan terbalik
Node publik backNode;
//Apakah akan membalik
boolean terbalik = false;
// sudut balik
Waktu DoubleProperty = SimpleDoubleProperty baru(Math.PI / 2);
//Efek khusus flip depan
PerspectiveTransform frontEffect = PerspectiveTransform baru();
//Efek khusus membalik terbalik
PerspectiveTransform backEffect = PerspectiveTransform baru();
Metode create mengembalikan konten yang akan ditampilkan:
Copy kode kodenya sebagai berikut:
kekosongan pribadi buat() {
waktu.addListener(baru ChangeListener() {
@Mengesampingkan
kekosongan publik berubah(ObservableValue<? extends Number> arg0,
Angka arg1, Angka arg2) {
setPT(frontEffect, waktu.get());
setPT(backEffect, waktu.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, waktu.get());
setPT(backEffect, waktu.get());
frontNode.setEffect(frontEffect);
backNode.setEffect(backEffect);
getChildren().addAll(backNode, frontNode);
}
Yang perlu diperhatikan pada kode di atas adalah seiring dengan perubahan nilai waktu maka nilai frontEffect dan backEffect juga akan berubah. 2. Implementasi efek khusus PerspectiveTransform menggunakan metode Math.sin() dan Math.cos() untuk mensimulasikan transformasi sudut 3D. Implementasi spesifiknya adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
private void setPT(PerspectiveTransform pt, double t) {
lebar ganda = 200;
tinggi ganda = 200;
radius ganda = lebar / 2;
punggung ganda = tinggi / 10;
pt.setUlx(radius - Math.sin(t) * radius);
pt.setUly(0 - Math.cos(t) * kembali);
pt.setUrx(radius + Math.sin(t) * radius);
pt.setUry(0 + Math.cos(t) * kembali);
pt.setLrx(radius + Math.sin(t) * radius);
pt.setLry(tinggi - Math.cos(t) * kembali);
pt.setLlx(radius - Math.sin(t) * radius);
pt.setLly(tinggi + Math.cos(t) * kembali);
}
3. Transformasi sudut berubah dari 3,14/2 menjadi -3,14/2 dalam 1 detik.
Copy kode kodenya sebagai berikut:
KeyFrame frame1 = KeyFrame baru(Durasi.ZERO, KeyValue baru(waktu,
Math.PI/2, Interpolator.LINEAR));
KeyFrame frame2 = KeyFrame baru(Durasi.detik(1),
EventHandler baru() {
@Mengesampingkan
pegangan kekosongan publik(acara ActionEvent) {
membalik = !membalik;
}
}, KeyValue baru (waktu, -Math.PI / 2, Interpolator.LINEAR));
4. Pembuatan objek FlipView: Objek FlipView dapat dengan mudah dibuat melalui konstruktor.
Copy kode kodenya sebagai berikut:
ImageView image1 = ImageView baru(Gambar baru(getClass()
.getResourceAsStream("lion1.png")));
ImageView image2 = ImageView baru(Gambar baru(getClass()
.getResourceAsStream("lion2.png")));
FlipView flip = FlipView baru(gambar1, gambar2);
5. Render: