Фоновая анимация при наведении курсора мигает с помощью рифлера JFoenix - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь добавить плавный переход от белого фона к слегка серому при наведении курсора на ячейку в виде списка. По какой-то причине стандартных переходов для этого не существует, и мы также не можем использовать временные шкалы, потому что фоновая заливка не является свойством. Итак, я создал свой собственный Переход.

Вот что у меня есть:

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. Если я использую компонент без риплеров, он больше не мигает. Но я хочу эти рябчики.

Можете ли вы помочь мне исправить это?

...