Implementasi fungsi:
1. Implementasi ImageLoader kelas pemuatan gambar:
1) Gunakan antrian pemblokiran untuk menyimpan gambar: BlockingQueue images = new ArrayBlockingQueue<>(2);
2) Gunakan image eof untuk menunjukkan akhir antrian gambar: Image eof = new WritableImage(1, 1);
3) Baca gambar yang ditentukan dalam satu lingkaran. Karena ini adalah antrian pemblokiran, thread akan secara otomatis diblokir ketika antrian sudah penuh.
Copy kode kodenya sebagai berikut:
menjalankan kekosongan publik() {
int nomor identitas = 0;
mencoba {
sementara (benar) {
Jalur string = sumber daya[id];
InputStream adalah = getClass().getResourceAsStream(jalur);
jika (adalah != nol) {
Gambar gambar = Gambar baru(adalah, lebar, tinggi, benar, benar);
jika (!gambar.isError()) {
gambar.put(gambar);
}
}
id++;
if (id >= sumber daya.panjang) {
nomor identitas = 0;
}
}
} tangkapan (Pengecualian e) {
} Akhirnya {
jika (!dibatalkan) {
mencoba {
gambar.put(eof);
} tangkapan (InterruptedException e) {
}
}
}
}
2. Implementasi efek khusus, dengan mengambil gambar peralihan busur sebagai contoh: Pertama tentukan efek khusus perubahan PanjangTransisi: atur waktu perubahan, dan hubungan antara jumlah radian dan waktu.
Copy kode kodenya sebagai berikut:
kelas PanjangTransisi memperluas Transisi {
Busur busur;
publik PanjangTransisi(Durasi d, Busur busur) {
ini.arc = busur;
setCycleDuration(d);
}
@Mengesampingkan
interpolasi kekosongan yang dilindungi (d ganda) {
arc.setLength(d * 360);
}
}
Kemudian atur efek cascading gambar:
Copy kode kodenya sebagai berikut:
grup.setBlendMode(BlendMode.SRC_OVER);
berikutnya.setBlendMode(BlendMode.SRC_ATOP);
Dan efek fade out dari gambar sebelumnya:
FadeTransition ft = new FadeTransition(Duration.detik(0,2), mask2);
Terakhir, jalankan dua efek khusus ini secara bersamaan:
ParallelTransition pt = ParallelTransition baru(lt, ft);
Render: