2013-02-10 35 views
0

我已經通過改變JScrollPane的水平滾動條的值來製作動畫,就像android操作系統的屏幕之間的轉換。在跑步的第一秒鐘(最多10秒)內,如果我要求動畫,它不光滑並跳躍;但過了一段時間,我玩了(請求動畫),它完全平滑。爲什麼會發生,更重要的是如何解決這個問題?爲什麼我的動畫在第一次播放時不順暢?

我不是說我的動畫的第一秒不光滑,我的意思是,當我第一次開始我的程序時,我要求的動畫不光滑,但後來在下一次,這是光滑的

final JScrollBar br = mainContainerScrollPane.getHorizontalScrollBar(); 
     ActionListener toTheRight = new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      if (br.getValue() + 140 <= destinationScreenValue) 
      { 
       br.setValue(br.getValue() + 140); 
      } else 
      { 
       br.setValue(destinationScreenValue); 
       currentScreenName = destinationScreenName; 
       timer.stop(); 
      } 
     } 
    }; 
     timer = new Timer(10, toTheRight); 
     timer.setRepeats(true); 
     timer.setCoalesce(true); 
     timer.start(); 
+0

請向我們顯示您的代碼。 – 2013-02-10 19:53:32

+2

沒有任何代碼示例告訴我們你在做什麼,我們會浪費對方時間猜測什麼可能是錯誤的 – MadProgrammer 2013-02-10 19:57:42

+0

對不起,我寫了我的代碼,請注意大寫 – Soheil 2013-02-10 20:15:15

回答

2

以100Hz運行幾乎會立即使EDT飽和,這將與正常的JVM啓動開銷相沖突。一些替代品:

  • 使用here顯示的方法檢查您的動畫預算。

  • 以較低的速率嘗試profiling以找到目標平臺的最佳值。

  • 指定啓動開銷超過Timer的初始延遲。

  • 以較低的幀速率開始,並使用較短的延遲值事情安定下來。

附錄:這裏是一些例子,動態地改變動畫速度:

+0

'從較低的幀速率開始並在事情穩定後使用較短的延遲增加值,您是否建議即使整個動畫持續1秒? – Soheil 2013-02-10 20:56:28

+2

在合適的情況下,當然;爲[示例](http://stackoverflow.com/a/11233735/230513)。 – trashgod 2013-02-10 20:58:51

+1

@soheil看看[這個](http://stackoverflow.com/questions/14789107/how-to-make-this-java-animation-smooth/14796414#14796414)。這是可伸縮動畫的一個例子,其中變化量取決於動畫必須播放的時間量 – MadProgrammer 2013-02-10 21:05:05

相關問題