0

我通过更改 a 的水平滚动条的值制作了动画JScrollPane,类似于 android OS 屏幕之间的过渡。在跑步的前几秒(最多 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();
4

1 回答 1

2

以 100 Hz 运行几乎会立即使 EDT 饱和,这将与正常的 JVM 启动开销相冲突。一些替代方案:

  • 使用此处显示的方法检查您的动画预算。

  • 尝试以较低的速率进行分析,以找到适合您的目标平台的最佳值。

  • Timer指定超过启动开销的初始延迟。

  • 从较低的帧速率开始,并在事情稳定下来使用更短的延迟来提高值。

附录:以下是一些动态改变动画速率的示例:

于 2013-02-10T20:46:33.433 回答