我正在使用Timing Framework中的Animator类来执行简单动画(移动JPanel),大致基于Filthy Rich Clients
中的示例我已经覆盖了timingEvent(),如下所示
public void timingEvent(float arg0) {
float fraction = this.animator.getTimingFraction();
fraction = Math.min(1.0f, fraction);
if (fraction >= 1.0f) {
this.mainGUI.initiateSwitchToMainScreenTransition();
} else if (fraction < 0.5f) {
this.translateY = (int) (MAX_Y * (2 * fraction));
repaint();
}
}
我覆盖了paint()以使用translateY中的值来移动面板。
动画本身效果很好。
我的问题是调用initiateSwitchToMainScreenTransition(),我希望在动画完成时执行。虽然这有效,但动画结束和调用触发之间存在相当大的延迟(调试已确认问题不是initiateSwitchToMainScreenTransition()所用时间的长度 - 延迟发生在调用之前。)
有没有更好的方法来实现这一目标,即没有延迟?
答案 0 :(得分:0)
如果您正在实施 org.jdesktop.animation.timing.TimingTarget ,那么有一个end()方法应该在动画完成时调用 - 这似乎对我有用用过它。我认为你不能保证在分数达到1.0之后调用timingEvent。
你的实现似乎没有为定时器的后半部分做任何事情(当分数在0.5和1.0之间时)。如果您希望动画在计时器的整个持续时间内继续,您可以重新排列代码,如下所示:
@Override
public void timingEvent(float fraction) {
translateY = (int) (MAX_Y * fraction);
repaint();
}
@Override
public void end() {
mainGUI.initiateSwitchToMainScreenTransition();
}