为什么我的动画第一次播放时不流畅?
我通过改变JScrollPane
的水平滚动条的值制作了一个动画,类似于安卓操作系统屏幕之间的转换。在跑步的前几秒(最多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();
# 1 楼答案
以100 Hz的频率运行几乎会立即使EDT饱和,这将与正常的JVM启动开销相冲突。一些替代方案:
使用所示的方法检查动画预算
尝试以较低的速率profiling为目标平台找到最佳值
为超过启动开销的
Timer
指定初始延迟从较低的帧速率开始,使用较短的延迟,在事情稳定下来后,将该值提升
附录:以下是一些动态改变动画速率的示例:
模拟Hooke's law的}
FloatSpring
中的^{动态调整}
Window
边界的^{