【问题标题】:Why is my animation is not smooth when first playing?为什么我的动画在第一次播放时不流畅?
【发布时间】:2013-02-10 19:51:50
【问题描述】:

我通过更改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();

【问题讨论】:

  • 请向我们展示您的代码。
  • 如果没有任何代码示例向我们展示您在做什么,我们将浪费彼此的时间来猜测可能出了什么问题
  • 对不起,我写了我的代码,请注意用粗体写的内容
  • @trashgod 不,不相关...请再读一遍
  • 这是一个常见问题。有一个古老的(好吧,可能是几个月前的)技巧——在隐藏动画的情况下运行一次动画,让所有内容都“灵活”起来。

标签: java animation timer jscrollpane


【解决方案1】:

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

  • 使用here 所示的方法检查您的动画预算。

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

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

  • 从较低的帧速率开始,然后使用较短的延迟提升值, 事情稳定下来。

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

【讨论】:

  • Start with a lower frame rate and ramp up the value, using a shorter delay, after things settle down你是否建议即使整个动画持续1秒?
  • 在适当的情况下,当然可以;对于example
  • @soheil 看看this。这是一个可缩放动画的示例,其中的变化量取决于动画必须播放的时间量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多