这不是一个问题,更像是和别人分享我遇到的问题以及我是如何解决的。
基本上,我试图创建一个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
}
});
}