这不是一个问题,更像是与他人分享我遇到的问题以及我是如何解决的.
基本上,我正在尝试创建一个VIEwAnimator,他会根据用户点击创建额外的子项.
在我动画下一个VIEw之后进行清理,我把它放了
outAnimation.setAnimationListener(Listener);
并在AnimationListener中
public voID onAnimationEnd(Animation animation) { vIEwAnimator.removeVIEw(out);}
现在,上面方法的问题是,在onAnimationEnd之后,它会抛出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>
和onAnimationEnd我可以安全地调用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 } }); }
总结 以上是内存溢出为你收集整理的android – 如果在onAnimationEnd上删除子进程,ViewAnimator的OnDraw会抛出NullPointerException全部内容,希望文章能够帮你解决android – 如果在onAnimationEnd上删除子进程,ViewAnimator的OnDraw会抛出NullPointerException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)