Implementação da função:
1. Implementação do ImageLoader da classe de carregamento de imagem:
1) Use a fila de bloqueio para armazenar imagens: BlockingQueue images = new ArrayBlockingQueue<>(2);
2) Use a imagem eof para indicar o fim da fila de imagens: Imagem eof = new WritableImage(1, 1);
3) Leia a imagem especificada em um loop Por ser uma fila de bloqueio, o thread será bloqueado automaticamente quando a fila estiver cheia.
Copie o código do código da seguinte forma:
execução void pública() {
identificação interna = 0;
tentar {
enquanto (verdadeiro) {
String caminho = recursos[id];
InputStream é = getClass().getResourceAsStream(caminho);
if (é! = nulo) {
Imagem imagem = nova imagem (é, largura, altura, verdadeiro, verdadeiro);
if (!image.isError()) {
imagens.put(imagem);
}
}
id++;
if (id >= recursos.length) {
identificação = 0;
}
}
} catch (Exceção e) {
} finalmente {
if (!cancelado) {
tentar {
imagens.put(eof);
} catch (InterruptedException e) {
}
}
}
}
2. Implementação de efeitos especiais, tomando imagens de troca de arco como exemplo: Primeiro defina o efeito especial de mudança LengthTransition: defina o tempo de mudança e a relação entre o número de radianos e o tempo.
Copie o código do código da seguinte forma:
class LengthTransition estende Transição {
Arco de arco;
public LengthTransition(Duração d, Arco arco) {
este.arco = arco;
setCycleDuration(d);
}
@Substituir
interpolação de vazio protegido (duplo d) {
arco.setLength(d * 360);
}
}
Em seguida, defina o efeito cascata da imagem:
Copie o código do código da seguinte forma:
group.setBlendMode(BlendMode.SRC_OVER);
next.setBlendMode(BlendMode.SRC_ATOP);
E o efeito fade out da imagem anterior:
FadeTransition ft = new FadeTransition(Duration.seconds(0.2),mask2);
Finalmente, execute estes dois efeitos especiais ao mesmo tempo:
ParallelTransition pt = new ParallelTransition(lt, ft);
Renderização: