【发布时间】:2014-05-28 13:13:21
【问题描述】:
我正在尝试实现类似于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,那么它将导致各种速度的选取框。
如何摆脱这些弊端?
【问题讨论】:
标签: java javafx javafx-2 marquee