这不是一个问题,更像是和别人分享我遇到的问题以及我是如何解决的。
基本上,我试图创建一个viewanimator,它将创建额外的子元素来响应用户的点击。
为了在动画中显示下一个视图后进行清理,我将

outAnimation.setAnimationListener(listener);

在AnimationListener中
public void onAnimationEnd(Animation animation) {
    viewAnimator.removeView(out);
}

现在,上述方法的问题是,在animationEnd之后,它会立即抛出一个nullPointerException。基本上,这意味着ViewAnimator仍在使用正在被设置动画的子视图来绘制。既然我把它移走了,那里就没有了。
我已经做了研究,基本上,这是一个已知的错误。参阅:Android Animation is not finished on onAnimationEnd
为了解决这个问题,我修改了布局。
<ViewAnimator
    android:id="@+id/animator"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <FrameLayout
        android:id="@+id/container1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </FrameLayout>

    <FrameLayout
        android:id="@+id/container2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </FrameLayout>
</ViewAnimator>

在动画结束时,我可以安全地调用container.removeAllViews()。要在中设置新视图的动画,我选择隐藏容器并
container.addView(newView);
animator.setDisplayedChild(animator.indexOfChild(container));

我很高兴看到你的评论和建议。

最佳答案

我遇到了这个问题,并使用视图的post方法等待动画真正完成:

      public void onAnimationEnd(Animation animation) {
        //Wait until the container has finished rendering to remove the items.
        view.post(new Runnable() {
          @Override
          public void run() {
            //remove view here
          }
        });
      }

07-27 17:10