Я пытаюсь добиться эффекта, аналогичного marquee - строке длинного (в моем случае) текста, который перемещается по горизонтали ось. Мне удалось заставить его работать, но я не могу назвать его удовлетворительным.
Мой класс Controller
выглядит следующим образом:
@FXML
private Text newsFeedText;
(...)
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
TranslateTransition transition = TranslateTransitionBuilder.create()
.duration(new Duration(7500))
.node(newsFeedText)
.interpolator(Interpolator.LINEAR)
.cycleCount(Timeline.INDEFINITE)
.build();
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = gd.getDisplayMode().getWidth();
transition.setFromX(width);
transition.setToX(-width);
transition.play();
}
newsFeedText
привязан к некоторому текстовому источнику, который динамически обновляется, поэтому он содержит различное количество текста.
Мой код имеет как минимум два недостатка:
- Переход идет от
-width
к+width
;width
- ширина разрешения монитора
Будут моменты, когда текст вообще не будет виден, если окно не полноэкранное. Если текст будет длиннее и newsFeedText
ширина будет больше ширины разрешения монитора, то переход исчезнет "пополам" (оставаясь на экране).
- В настоящее время
Duration
не зависит от шириныnewsFeedText
.
Теперь это не изношено, но если переходы fromX
и toX
будут вычисляться динамически, то это приведет к различным скоростям бегущей строки.
Как избавиться от этих недостатков?