Метод получает новый номер, который должен отображаться вместо текущего номера. Например, текущий номер равен 1, а метод вызывается со значением параметра 5. Идея состоит в том, чтобы анимировать переключение номеров. 1 движется вниз со своего места, а 2 падает сверху. И это повторяется, пока не будет достигнуто 5. Числа представляют ImageNumber классы, которые расширяют ImageView . Номера размещаются на NumberPlace , который расширяет StackPane .
В настоящее время мой код работает следующим образом : при отправке новых чисел анимация идет так, как должна (старый номер перемещается вниз, а новый идет сверху). Но проблема в том, что я постоянно вижу все цифры в центре, пока идет анимация. Таким образом, если текущее число от 1 до 5, это новое число, я получаю все числа от 1 до 5, показанные с перекрытием. Каждый коммутатор помещается в параллельную транзакцию (1 идет вниз, а 2 сверху идет в одну параллельную транзакцию). Все параллельные транзакции помещаются в одну последовательную транзакцию, которая воспроизводится после завершения цикла и выполнения всех параллельных транзакций.
Я думаю, что проблема заключается в добавлении новых элементов ( children ) в разместить объект. Кроме того, удаление надлежащих объектов формирует список детей в нужное время. Может быть, я не прав, может быть, что-то еще проблема.
short tempOld = oldNumber.getNum();
if(tempOld<0)
tempOld = 0;
short tempNew = newNumber.getNum();
place.getChildren().clear();
SequentialTransition seq = new SequentialTransition();
while(tempOld < tempNew) {
ImageNumber tempOldImg = new ImageNumber(tempOld);
ImageNumber temNewImg = new ImageNumber((short) (tempOld+1));
tempOldImg.setImage(JackpotValueBox.numMap.get(JackpotValueType.BRONZE).get(tempOld));
temNewImg.setImage(JackpotValueBox.numMap.get(JackpotValueType.BRONZE).get(tempOld+1));
tempOldImg.setFitHeight(50);
temNewImg.setFitHeight(50);
tempOldImg.setFitWidth(50);
temNewImg.setFitWidth(50);
temNewImg.setY(temNewImg.getY() - 150);
place.getChildren().add(0, temNewImg);
place.getChildren().add(1, tempOldImg);
TranslateTransition transitionOld = new TranslateTransition();
transitionOld.setDuration(Duration.millis(700));
transitionOld.setNode(temNewImg);
transitionOld.setFromY(-70);
transitionOld.setToY(0);
transitionOld.setCycleCount(1);
transitionOld.setInterpolator(Interpolator.LINEAR);
TranslateTransition transitionNew = new TranslateTransition();
transitionNew.setDuration(Duration.millis(700));
transitionNew.setNode(tempOldImg);
transitionNew.setFromY(0);
transitionNew.setToY(100);
transitionNew.setCycleCount(1);
transitionNew.setInterpolator(Interpolator.LINEAR);
ParallelTransition parallel = new ParallelTransition(transitionOld, transitionNew);
parallel.setOnFinished(event -> place.getChildren().remove(tempOldImg));
if(tempOld != tempNew -1) {
parallel.setOnFinished(event ->{
place.getChildren().remove(temNewImg);
});
}
seq.getChildren().add(parallel);
tempOld++;
}
this.animation = seq;
Я новичок в javafx. Извините за плохой английский. Надеюсь, я был достаточно ясен.