8

フレームごとにアニメーションを更新する必要がありますCADisplayLink。iOS では 、WinPhone では ですがCompositionTarget、Android ではどうすればよいですか?

現在、 をTimerと一緒に使用しHandlerていますが、コールバックをリフレッシュ レートと同期させる方法があると思います。

4

2 に答える 2

3

私が知っている最も直接的なものはChoreographer(API 16の時点で)です。

アニメーションの書き方によって同期の最適な方法が決まるようです。Choreographer は一般的に役に立ちません。Choreographer は、アニメーションが AFAIK に含まれる「アニメーション フレームワーク」の外部で記述されている場合に役立ちますViewPropertyAnimator。おそらく XML 定義のアニメーションでしょうか? まさに文書化されていないもの。

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

于 2015-01-26T21:15:34.913 に答える
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代わりに を見てください。
  • カメラのプレビューとメディアの再生は別のパスで描画され、ほとんどの場合、このリスナーと同期されていないため、個々のフレームと同期するために使用することはできません。
于 2013-01-25T11:22:37.737 に答える