8

我需要更新每帧动画,在 iOS 上我有CADisplayLink,在 WinPhone 上我有CompositionTarget,但我如何在 Android 上做到这一点?

目前我正在使用 a TimerHandler但我相信有一种方法可以将回调与刷新率同步。

4

2 回答 2

3

我所知道的最直接的等价物是Choreographer(从 API 16 开始)。

看起来您的动画编写方式决定了同步它的最佳方式。编舞一般用处不大。ViewPropertyAnimator如果您的动画是在 AFAIK 包含的“动画框架”之外编写的,并且......也许是 XML 定义的动画,Choreographer 会很有用?究竟是什么是无证的。

Choreographer看起来它主要用于同步GLSurfaceView动画。

于 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 回答