我通过改变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();
最佳答案
以 100 Hz 运行将几乎立即使 EDT 饱和,这将与正常的 JVM 启动开销发生冲突。一些替代方案:
使用所示的方法 here检查您的动画预算。
尝试 profiling以较低的费率找到目标平台的最佳值(value)。
为
Timer
指定超过启动开销的初始延迟。从较低的帧速率开始,并在事情稳定下来之后使用较短的延迟来提高值。
附录:以下是一些动态改变动画速率的示例:
A
Test
模拟 Hooke's law 的FloatSpring
.TestAnimatedWindow
动态调整窗口
的边界。
关于java - 为什么我的动画第一次播放时不流畅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801909/