Я пытаюсь добавить плавный переход от белого фона к слегка серому при наведении курсора на ячейку в виде списка. По какой-то причине стандартных переходов для этого не существует, и мы также не можем использовать временные шкалы, потому что фоновая заливка не является свойством. Итак, я создал свой собственный Переход.
Вот что у меня есть:
public class BackgroundTransition extends Transition {
private static final double DEFAULT_DURATION = 500;
private Control element;
private Color fromColor;
private Color toColor;
//Other constructors
public BackgroundTransition(Control element, Duration duration, Color fromColor, Color toColor) {
setInterpolator(Interpolator.LINEAR);
setCycleDuration(duration);
this.element = element;
this.fromColor = fromColor;
this.toColor = toColor;
}
//Getters and setters
protected void interpolate(double frac) {
Color color = fromColor.interpolate(toColor, frac);
element.setBackground(new Background(new BackgroundFill(color, CornerRadii.EMPTY, Insets.EMPTY)));
}
}
Я применяю это так:
sideList.setCellFactory(ev -> {
JFXListCell<Label> cell = new JFXListCell<Label>();
BackgroundTransition transition = new BackgroundTransition(cell, Color.WHITE, Color.web("#f5f5f5"));
cell.hoverProperty().addListener((v, oldVal, newVal) -> {
transition.setRate(newVal ? 1 : -1);
transition.playFrom(transition.getCurrentTime());
});
return cell;
});
Это работает, но фон мигает в течение одного кадра, когда анимация переворачивается. (Похоже, фон удален за один кадр до продолжения анимации)
Я тестировал ту же анимацию на этикетке, также используя hoverProperty()
, и никаких вспышек не было. После некоторого тестирования я понял, что это было связано с рипплерами JFoenix. Если я использую компонент без риплеров, он больше не мигает. Но я хочу эти рябчики.
Можете ли вы помочь мне исправить это?