2

Android の API 15 Animation クラスには次のものが含まれます。

public boolean getTransformation(long currentTime, Transformation outTransformation) {
      ... code ...
}

このメソッドはデルタ時間を計算し、それを Interpolator に送信します。Interpolator は、アニメーションが実行された時間に基づいて、変換に適用される値を返します。

独自のカスタム ビューを作成するときは、post(Runnable) メソッドを使用し、ロジックの更新を呼び出して無効化し、条件が満たされない場合は再度 post(Runnable) を呼び出します。ロジック呼び出しには 1 ミリ秒かかり、オーバーライドされた onDraw(Canvas) にも 1 ミリ秒かかります。私を悩ませているのは、多くの場合、デルタ時間が 40 (40 ミリ秒は 25 フレーム/秒) を超える値になる invalidate() 呼び出しであり、それよりも高い値を取得することはお勧めできません。デルタ タイムを使用して次のフレームをどこに描画するかを計算すると、途切れることが多く、不可能です。私はデルタ時間を使用せず、電話がビューを個別に更新できる速度に依存する必要があり、異なる電話で速度が速くなったり遅くなったりするのは良い考えではありません.

SurfaceView は、その構造が他のビューと結合していないため (主に Z 深度の問題)、私が扱うことができないものです。

私の質問ですが、Android はどのようにアニメーションを解決しましたか? それらはスタッターせず、デルタ時間を使用します。どこかに魔法がかかっているはずですが、どこにあるのかわかりません。どんな助けでも大歓迎です。

4

0 に答える 0