我正在使用 JFoenix 库开发一个系统,并且正在使用一些带有波浪动画的按钮。但是,当我使用按钮打开新窗口或加载列表时,动画会在屏幕加载或列表加载时短暂“停止”。我想知道如何在加载列表或类似的东西之前运行动画。不要让动画崩溃。我尝试使用 Threads 加载列表,但是,因为调用线程的函数进入按钮的 click 函数,动画以相同的方式锁定。另一个例子是,当我使用 JavaFX 过渡动画打开一个新的 AnchorPane 时,当它的元素正在加载时,动画会短暂挂起,这会影响应用程序的所有质量
例如,当我单击下图所示的“添加”按钮时,它会在按钮上生成一个波形,然后执行打开 AnchorPane 的功能和将面板移动到 x = 0 位置的转换功能。它还带有一个带有一些元素的简单 DropDownList。
单击按钮时执行的代码:
@FXML
public void btnAddClique(ActionEvent event) {
if (telaAtual != 3) { //caso a tela de cadastro nao esteja aberta
PaneAdd add = new PaneAdd();
FXMLLoader loader = new FXMLLoader(getClass().getResource("PaneAdd.fxml"));
loader.setController(add);
try {
if (paneAtual == 1) {
paneFundo2.getChildren().setAll((Node)loader.load());
paneAtual = 2;
} else {
paneFundo.getChildren().setAll((Node)loader.load());
paneAtual = 1;
}
} catch (IOException e){
System.out.println("Erro ao alterar tela, função 'btnAddClique', classe FXMLDocumentController: " + e.toString());
}
telaAtual = 3;
new Thread(new RunAnimacaoAbertura()).start();
add.init(this.listView);
}
}
之后,它运行动画线程:
public class RunAnimacaoAbertura implements Runnable {
public void run() {
TranslateTransition tran = new TranslateTransition();
TranslateTransition tran2 = new TranslateTransition();
tran.setDuration(Duration.seconds(0.250));
tran2.setDuration(Duration.seconds(0.250));
tran.setNode(paneFundo);
tran2.setNode(paneFundo2);
if (paneAtual == 1) {
tran2.setFromX(0);
tran2.setToX(515);
tran.setFromX(-515);
tran.setToX(0);
} else {
tran.setFromX(0);
tran.setToX(515);
tran2.setFromX(-515);
tran2.setToX(0);
}
tran2.play();
tran.play();
}
}
最后,它执行加载列表的功能:
public void init(JFXListView<Label> listView) {
listViewControler = listView;
cbGerentePA.setItems(arquivo.pegarListaString(1, 0));
date.setPromptText("Nascimento");
date.setEditable(false);
date.setDefaultColor(Color.web("#1abc9c"));
date.getStylesheets().add("agenda/style.css");
hBoxFundoDate.getChildren().setAll(date);
}