私はを持っていますが、私はをWinPhoneに持っていますが、フレームごとにアニメーションを更新する必要があります。CADisplayLink(iOS)またはCompositionTarget(WP)のアンドロイドとは何ですか
現在、私はHandler
と並んでTimer
を使用していますが、コールバックとリフレッシュレートを同期させる方法があると思います。
私はを持っていますが、私はをWinPhoneに持っていますが、フレームごとにアニメーションを更新する必要があります。CADisplayLink(iOS)またはCompositionTarget(WP)のアンドロイドとは何ですか
現在、私はHandler
と並んでTimer
を使用していますが、コールバックとリフレッシュレートを同期させる方法があると思います。
ええと、ViewTreeObserver
のように見えます。このコードを試してみてください:ノートの
final ViewTreeObserver vto = myView.getViewTreeObserver();
vto.addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
// Do whatever you need to do...
}
});
カップル:
onDraw
は、あなたがそれで何ができるかの限界の束を持っています。具体的には、ビューツリーを変更することはできません。それが必要な場合は、代わりにViewTreeObserver.OnPreDrawListener
をご覧ください。私が気づいている最も直接的な同等物は、Choreographer
(API 16時点)です。
アニメーションがどのように書き込まれているかのように見えるので、アニメーションを同期する最適な方法が決まります。振付師は一般的に有用ではありません。振付師はあなたのアニメーションがAFAIKにViewPropertyAnimator
を含む「アニメーションフレームワーク」の外で書かれていて、多分XMLで定義されたアニメーションである場合に便利です。厳密に何が文書化されていないか。
Choreographer
は、GLSurfaceView
アニメーションの同期に主に役立つようです。
FWIW、AndroidのUIフレームワークがGLSurfaceViewでロックステップをレンダリングするようです。私の推測では、SurfaceFlingerは、出力フレームを合成する前に、それぞれからブロッキングフレームのデキューを実行します。 – nmr
ニース、これは私のために十分です。 – horeaper
これは 'CADisplayLink'とは異なり、ビューが描画された場合にのみコールバックされます。これは、ビューが無効になった場合にのみ発生します。対照的に、描画されるフレームごとに 'CADisplayLink'が呼び出されます。 'CADisplayLink'を模倣するために私は上記を行い、カスタムビューの' onDraw() 'メソッドでも' invalidate() 'を呼び出します。 – mvds