関数の実装:
1. 画像読み込みクラス ImageLoader の実装:
1) ブロッキング キューを使用してイメージを保存します。 BlockingQueue image = new ArrayBlockingQueue<>(2);
2) イメージ eof を使用して、イメージ キューの終わりを示します。 Image eof = new WritableImage(1, 1);
3) 指定されたピクチャをループで読み取ります。これはブロッキング キューであるため、キューがいっぱいになるとスレッドは自動的にブロックされます。
次のようにコードをコピーします。
public void run() {
int ID = 0;
試す {
while (true) {
文字列パス = リソース[id];
入力ストリームは = getClass().getResourceAsStream(path);
if (!= null) {
画像 image = new Image(is, width, height, true, true);
if (!image.isError()) {
画像.put(画像);
}
}
id++;
if (id >= resource.length) {
ID = 0;
}
}
} catch (例外 e) {
} ついに {
if (!キャンセル) {
試す {
画像.put(eof);
} catch (InterruptedException e) {
}
}
}
}
2. 特殊効果の実装、例として円弧の切り替え画像を取り上げます。まず、LengthTransition 変更特殊効果を定義します。変更時間、およびラジアン数と時間の関係を設定します。
次のようにコードをコピーします。
class LengthTransition extends Transition {
アークアーク。
public LengthTransition(Duration d, Arc 円弧) {
this.arc = アーク;
setCycleDuration(d);
}
@オーバーライド
protected void interpolate(double d) {
arc.setLength(d * 360);
}
}
次に、画像のカスケード効果を設定します。
次のようにコードをコピーします。
group.setBlendMode(BlendMode.SRC_OVER);
next.setBlendMode(BlendMode.SRC_ATOP);
前の写真のフェードアウト効果:
FadeTransition ft = new FadeTransition(Duration.秒(0.2), マスク2);
最後に、次の 2 つの特殊効果を同時に実行します。
ParallelTransition pt = 新しい ParallelTransition(lt, ft);
レンダリング: