使用setStartDelay的AnimatorSet调用onAnimationStart

时间:2014-04-15 12:30:28

标签: android animation synchronization

我正在使用Android KitKat,这似乎没有按预期工作。我有一个AnimatiorSet,应该在一段延迟后启动,但我想在动画实际开始时(延迟之后)做一些动作。似乎AnimatorSet在调用start()之后立即在侦听器上调用onAnimationStarted。

以下示例代码:

AnimatorSet set = new AnimatorSet();
set.playTogether(
     ObjectAnimator.ofFloat(obj, "x", 10),
     ObjectAnimator.ofFloat(obj, "y", 10));
set.setStartDelay(5000);
set.setDuration(1000)

set.addListener(new AnimatorListenerAdapter()
{
    @Override
    public void onAnimationStart(Animator animation)
    {
        // do sth
    }
});

set.start();

在这种情况下,立即调用侦听器而不是延迟侦听器。为了解决这个问题,我检查了向传递给playTogether的动画师添加监听器是否给出了预期的结果,实际上是这样。这是一个错误吗?

1 个答案:

答案 0 :(得分:4)

另一个解决方法是:

@Override
public void onAnimationStart(Animator animator) {
    rootView.postDelayed(new Runnable() {
        @Override
        public void run() {
            // todo
        }
    }, set.getStartDelay());
}