2013-01-25 2 views

答えて

2

ええと、ViewTreeObserverのように見えます。このコードを試してみてください:ノートの

final ViewTreeObserver vto = myView.getViewTreeObserver(); 
vto.addOnDrawListener(new ViewTreeObserver.OnDrawListener() { 
    @Override 
    public void onDraw() { 
     // Do whatever you need to do... 
    } 
}); 

カップル:

  • onDrawは、あなたがそれで何ができるかの限界の束を持っています。具体的には、ビューツリーを変更することはできません。それが必要な場合は、代わりにViewTreeObserver.OnPreDrawListenerをご覧ください。
  • カメラのプレビューとメディアの再生は、別々のパスに描画され、このリスナーと同期されない可能性が高いため、個々のフレームと同期して再生することはできません。
+0

ニース、これは私のために十分です。 – horeaper

+1

これは 'CADisplayLink'とは異なり、ビューが描画された場合にのみコールバックされます。これは、ビューが無効になった場合にのみ発生します。対照的に、描画されるフレームごとに 'CADisplayLink'が呼び出されます。 'CADisplayLink'を模倣するために私は上記を行い、カスタムビューの' onDraw() 'メソッドでも' invalidate() 'を呼び出します。 – mvds

3

私が気づいている最も直接的な同等物は、Choreographer(API 16時点)です。

アニメーションがどのように書き込まれているかのように見えるので、アニメーションを同期する最適な方法が決まります。振付師は一般的に有用ではありません。振付師はあなたのアニメーションがAFAIKにViewPropertyAnimatorを含む「アニメーションフレームワーク」の外で書かれていて、多分XMLで定義されたアニメーションである場合に便利です。厳密に何が文書化されていないか。

Choreographerは、GLSurfaceViewアニメーションの同期に主に役立つようです。

+0

FWIW、AndroidのUIフレームワークがGLSurfaceViewでロックステップをレンダリングするようです。私の推測では、SurfaceFlingerは、出力フレームを合成する前に、それぞれからブロッキングフレームのデキューを実行します。 – nmr

関連する問題