2009-07-07 62 views
0

我使用從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(),我想在動畫完成時執行它。雖然這起作用,但在動畫結束和調用觸發之間存在相當大的延遲(調試已確認問題不是啓動切換到主屏幕傳輸()的時間長度 - 延遲發生在調用之前)。

有沒有更好的方法來實現這一點,即沒有延遲?

回答

0

如果您正在實施org.jdesktop.animation.timing.TimingTarget那麼應該在動畫完成時調用end()方法 - 這在我使用它時似乎適用於我。我認爲你不能保證timingEvent會在分數達到1.0後被調用。

你的實現似乎沒有爲計時器的後半部分做任何事情(當分數介於0.5和1.0之間時)。如果您希望動畫在整個計時器過程中繼續進行,您可以按如下方式重新排列代碼:

@Override 
public void timingEvent(float fraction) { 
    translateY = (int) (MAX_Y * fraction); 
    repaint(); 
}  

@Override 
public void end() { 
    mainGUI.initiateSwitchToMainScreenTransition(); 
} 
+0

謝謝。我實際上昨晚注意到了end()方法,並轉而使用它。但不幸的是,它並沒有擺脫這種延遲。我已經將動畫設置爲1800毫秒,但似乎在1000毫秒內完成了很多工作,導致我的代碼被激發之前延遲了800毫秒。 – William 2009-07-08 11:01:29