代码之家  ›  专栏  ›  技术社区  ›  William

Java时序框架——动画制作结束时的触发事件

  •  0
  • William  · 技术社区  · 16 年前

    我正在使用来自 Timing Framework 要执行简单的动画(移动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中的值将面板向下移动。

    动画本身工作得很好。

    我的问题是调用initiateswitchtoaminscreentrantrasition(),我希望在动画完成时执行它。虽然这样做有效,但在动画结束和调用触发之间有相当大的延迟(调试已确认问题不是initiateswitchtoaminscreentransensition()花费的时间长度-延迟发生在调用之前)。

    是否有更好的方法来实现这一点,即不延误?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Russ Hayward    16 年前

    如果你正在实施 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();
    }