2012-06-01 13 views
11

ここ数ヶ月、私はJavaでオープンソースのトゥイーンエンジン(Universal Tween Engine)を作って、スムーズなアニメーションやトランジションを簡単にAndroidのゲームに追加することができました。それはゲームのための風のように動作し、多くの人々(主にLibGDXコミュニティ)でうまく使用されています。ライブラリは汎用的で、何かをアニメーション化するために使用できます(Swing UIコンポーネント、OpenGLゲームオブジェクトなど)。今では、組み込みのアニメーションフレームワークと比較して、非常に複雑なアニメーションの作成を大幅に楽にできると信じているので、アンドロイドUI専用のlibにアドオンを作成したいと思います。Androidのアニメーションはどのようにして動作しますか?

My libは、すべての実行中のアニメーションを更新するたびに呼び出される.update(float deltaTime)メソッドを公開しています。すべてのゲームが無限ループを公開するので、ゲームに合わせて調整されましたが、UIではそうではありません。

したがって、Android APIのアニメーションフレームワークがどのように機能しているのだろうかと思っていました。 アニメーション専用の静的スレッドがあり、連続してアニメーションをフレーム単位で更新し、新しいアニメーションが実行されるまで一時停止します

私はthatのようなものを考えていましたが、デバイスのリフレッシュレートを考慮に入れていないため、このコードには満足できません。

+1

+1。 – Orlymee

答えて

3

Androidビューシステムがどのように実装されているかを見てみましょう。オープンソースの喜び

ビューで.animate()を呼び出すと、startAnimation()がValueAnimatorを開始するViewPropertyAnimatorが返されます。

ValueAnimatorには、ループを駆動するHandlerがあります。素敵なリンク、偉大なライブラリの

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/view/ViewPropertyAnimator.java

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/animation/ValueAnimator.java

+1

リンクをありがとう。アニメーションは別のスレッドを使用するのではなく、現在のスレッドメッセージキューに専用のハンドラを使用しているようです。私はこれの背後にある戦略を理解しているとは思えません。スレッドにメッセージが来る間にアニメートすると、遅延や乱れが発生する可能性があります... –

+0

Androidがアニメーションを違った方法でiOSよりも後者は、最大優先度を持つ専用スレッドを使用します。これは、データ処理とUIの応答性を犠牲にして非常に滑らかなアニメーションにつながります。私はiOSの方法を好きではないと確信していません。 –

+0

Android UI用のTween Engineで最大の優先順位を持つ専用のスレッド/キューを実装しようとします。それが目の喜びに適しているかどうかがわかります。これにより、Googleに間違っている可能性があるという概念の証明につながることさえあります。 –

関連する問題