Коды процессов в середине последовательного перехода - JavaFX - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь выполнить SequentialTransition, но между анимациями мне нужно выполнить некоторые команды.

Моя проблема заключается в том, что он всегда выполняет последние команды, переданные узлу. Есть ли способ исправить это?

Где "игнорируется" - это код, который мне нужно выполнить в первой анимации, тогда где это "выполняется" - это код, который мне нужно выполнить во второй анимации.

Спасибо

private void startAnimation(){

    vb_adv.setPrefWidth(197);
    ap_services.toBack();// Is ignored
    vb_adv.toFront();// Is ignored
    ScaleTransition expandAdvertising = new ScaleTransition(Duration.millis(2000), vb_adv);
    expandAdvertising.setToX(2);
    expandAdvertising.setCycleCount(2);
    expandAdvertising.setAutoReverse(true);

    ap_services.setPrefWidth(124);
    ap_services.toFront();//is executed
    ScaleTransition expandService = new ScaleTransition(Duration.millis(2000), ap_services);
    expandService.setDelay(Duration.seconds(3));
    expandService.setToX(3.7);
    expandService.setCycleCount(2);
    expandService.setAutoReverse(true);

    SequentialTransition sequence = new SequentialTransition(expandAdvertising, expandService);

    sequence.play();
}

1 Ответ

1 голос
/ 20 марта 2020

В коде, который у вас есть в данный момент, вы перемещаете ap_services в конец z-порядка и vb_adv в начало:

ap_services.toBack();
vb_adv.toFront();

Затем вы создаете и настраиваете ScaleTransition. Обратите внимание, что выполнение этой части по сути не занимает много времени; все, что вы делаете, это настраиваете анимацию, которая будет запускаться позже.

Следующее, что вы делаете, это перемещаете ap_services вперед:

ap_services.toFront();

Обратите внимание, что это произойдет практически сразу после предыдущих вызовов toFront() и toBack(), и, конечно, это сводит на нет эффект этих вызовов. Таким образом, ваши первоначальные вызовы фактически выполняются (не «игнорируются»), но вы немедленно делаете что-то, что отменяет их эффект.

Что вы действительно хотите, так это выполнить ap_services.toFront() после завершения ScaleTransition . Вы можете сделать это, поместив этот вызов в обработчик onFinished():

// ap_services.toFront();
expandAdvertising.setOnFinished(e -> ap_services.toFront());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...