java - 时间线 JavaFX
问题描述
如何在关键帧之间添加延迟?如果卡片不匹配,我希望用户在卡片关闭前能看到卡片正面 0.6 秒。这是我在底部尝试过的代码,但它不起作用。
KeyFrame start = new KeyFrame(
Duration.ZERO,
new KeyValue(imageView.scaleXProperty(), 1.0));
KeyFrame middle = new KeyFrame(
Duration.millis(150),
e -> imageView.setImage(image),
new KeyValue(imageView.scaleXProperty(), 0.0)
);
KeyFrame end = new KeyFrame(
Duration.millis(300),
new KeyValue(imageView.scaleXProperty(), 1.0));
new Timeline(start, middle, end).play();
KeyFrame start = new KeyFrame(
Duration.ZERO,
new KeyValue(imageView.scaleXProperty(), 1.0));
KeyFrame middle = new KeyFrame(
Duration.millis(150),
e -> imageView.setImage(image),
new KeyValue(imageView.scaleXProperty(), 0.0)
);
KeyFrame delay = new KeyFrame(
Duration.millis(600)
);
KeyFrame end = new KeyFrame(
Duration.millis(300),
new KeyValue(imageView.scaleXProperty(), 1.0));
new Timeline(start, middle,delay, end).play();
解决方案
注意:以下假设卡是“缩小”和“缩小”的。我不确定这实际上是您想要考虑Duration.ZERO
在问题中使用的内容。如果您希望卡片立即弹出,请删除缩小动画;只需显示卡片然后开始动画(其中PauseTransition
是顺序设置中的第一个)。
使用SequentialTranition
,PauseTransition
和ScaleTransition
对您有利。例如:
ScaleTransition start = new ScaleTransition(Duration.millis(150));
start.setToX(1.0);
// plays after 'start' finishes
PauseTransition middle = new PauseTransition(Duration.millis(600));
// plays after 'middle' finishes
ScaleTransition end = new ScaleTransition(Duration.millis(300));
end.setToX(0.0);
// only set the node on the SequentialTransition
SequentialTransition animation = new SequentialTransition(imageView, start, middle, end);
如果您希望比例转换具有相同的持续时间,则可以将上述内容简化为:
ScaleTransition scale = new ScaleTransition(Duration.millis(150));
scale.setFromX(0.0);
scale.setToX(1.0);
// Set to half the desired time because of the auto-reverse configured below
PauseTransition pause = new PauseTransition(Duration.millis(300));
// Plays 'scale' forwards, followed by 'pause', then plays 'pause' backwards
// followed by `scale`. That's why 'pause' has its duration set to half the full
// desired duration (it's played forwards then immediately backwards for a total
// of 600 ms).
SequentialTransition animation = new SequentialAnimation(imageView, scale, pause);
animation.setAutoReverse(true);
animation.setCycleCount(2);
推荐阅读
- sql-server - 使用 localhost\SQLEXPRESS 连接到 SQL 有效,但 local_ip\SQLEXPRESS 无效
- android - 未解决在 MainActivity.kt 中调用菜单 id
- locking - 为什么要在 XV6 调度程序中禁用中断?
- z3py - 如何向 BitVec 变量添加信息并使用 get_vars() 取回该变量?
- django - django本地静态文件配置
- c - 如何将字符串和数值写入文件
- scala - 如何将方法的返回类型与 Scala 本机或 TypeTag 进行比较?
- javascript - 使用 Tailwind-CSS 在 HTML 元素中删除或添加类后浏览器未更新
- c++ - Gnuplot_i.hpp C++ 接口绘制局部变量而不是文件
- google-cloud-platform - PubSub 死字