Реализация функции:
1. Реализация класса загрузки изображений ImageLoader:
1) Используйте очередь блокировки для хранения изображений: BlockingQueue images = new ArrayBlockingQueue<>(2);
2) Используйте image eof, чтобы указать конец очереди изображений: Image eof = new WritableImage(1, 1);
3) Прочитайте указанное изображение в цикле. Поскольку это блокирующая очередь, поток автоматически блокируется, когда очередь заполнена.
Скопируйте код кода следующим образом:
общественный недействительный запуск () {
интервал идентификатор = 0;
пытаться {
в то время как (истина) {
Строковый путь = ресурсы [id];
InputStream = getClass().getResourceAsStream(path);
если (есть != ноль) {
Изображение изображения = новое изображение (есть, ширина, высота, правда, правда);
если (!image.isError()) {
images.put(изображение);
}
}
идентификатор++;
if (id >= resources.length) {
идентификатор = 0;
}
}
} catch (Исключение е) {
} окончательно {
если (!отменено) {
пытаться {
images.put(eof);
} catch (InterruptedException e) {
}
}
}
}
2. Реализация специального эффекта, на примере изображений переключения дуги: Сначала определите специальный эффект изменения длины перехода: установите время изменения и соотношение между количеством радиан и временем.
Скопируйте код кода следующим образом:
класс LongTransition расширяет переход {
Дуга дуга;
public LongTransition(Duration d, Arc arc) {
this.arc = дуга;
setCycleDuration (д);
}
@Override
protected void interpolate(double d) {
arc.setLength(d * 360);
}
}
Затем установите эффект каскадного изображения:
Скопируйте код кода следующим образом:
group.setBlendMode(BlendMode.SRC_OVER);
next.setBlendMode(BlendMode.SRC_ATOP);
И эффект затухания на предыдущей картинке:
FadeTransition ft = новый FadeTransition(Duration.секунды(0,2), маска2);
Наконец, выполните эти два специальных эффекта одновременно:
ParallelTransition pt = новый ParallelTransition(lt, ft);
Рендеринг: