Timelines
是一个初始化为
List<Timeline> timelines = new ArrayList<>();
每个timeline
(timelines
的元素)的值是一条简短的推文。关于每个timeline
的结构的摘要,请注意每个timeline
来KeyFrame
// offset is adjusted according to msg length
Text tweet = new Text(offset, displayHeight - 15, tweetBody);
// set timeline
Timeline ti= new Timeline();
ti.setCycleCount(1);
ti.setAutoReverse(false);
// stop at a place where users cannot see
KeyValue kv = new KeyValue(tweet.xProperty(),-10 - mesLength);
// playtime is defined according to msg length
KeyFrame kf = new KeyFrame(Duration.millis(playtime), kv);
tl.getKeyFrames().add(kf);
timelines.add(ti);
总的来说我们有10条推文。迭代地构建上述10个时间轴,用适当的X位置(即tweet1:偏移800,tweet2:偏移1800,tweet3:偏移2500等)和持续时间链接它们,同时运行所有时间线。也就是说,所有推文都是在视图之外初始化的。
例如,在此图片中,您已将所有推文初始化,但它们已不在视野范围内。
我在玩什么:
timelines.forEach(Animation::play)
如何使用timelines
和Next
menuItem切换到Previous
中的相邻推文。
MenuItem nextControl = new MenuItem("Next");
fasterControl.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
// I want to use jumpTo but didn't figure it out
// timelines.forEach(timeline -> timeline.jumpTo(Duration.));
}
});
如果需要澄清和/或代码,请告诉我。
答案 0 :(得分:0)
你所做的只是改变一个属性。保存列表,
List<Text> tweets = new ArrayList<>();
然后有一个表示当前文本的字段/变量。
Text current;
没有处理,你找到你当前的索引,并抓住它的时间轴。
public void handle(ActionEvent event) {
if(current!=null){
TimeLine tl = timeLines.get(0);
current = tweets.get(0);
tl.stop();
tl.getKeyFrames().clear();
//set the display values eg the x value to zero.
tl.play();
} else{
int index = tweets.indexOf(current);
TimeLine oldLine = timeLines.get(index);
//stop the timeline, clear the old keyframes.
//create a new keyvalue, keyframe that hides this text, and play the timeline.
index = (index+1)%tweets.size();
TimeLine line = timeLines.get(index);
current = tweets.get(index);
//create a new keyvale/keyframe that shows this text, and play the time line.
}
}