2013-02-10 36 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

相关问题