0

JScrollPaneAndroid 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 に答える