跟甜同学一起搞一个退场动画,第一次播放没问题,第二次播放就发现有个view会先闪出来一下,然后再执行从0到1的alpha动画。但是代码里明明已经用setVisibility(INVISIBLE)隐藏这个view了,为什么没有生效呢?Google了一下,有人说要调一下clearAnimation(),试了一下果然好了。。。
那么为什么加上这句就好了呢?得去看看framework的代码了,首先看一下View的clearAnimation():
public void clearAnimation() {
if (mCurrentAnimation != null) {
mCurrentAnimation.detach();
}
mCurrentAnimation = null;
invalidateParentIfNeeded();
}
主要就是把mCurrentAnimation这个变量置空。这个变量是protected类型的,外面使用的话要通过getAnimation()这个接口:
public Animation getAnimation() {
return mCurrentAnimation;
}
搜了一下发现ViewGroup的dispatchDraw()里用到了这个方法来判断是否要drawChild(),如果getAnimation()不为空,即使mViewFlags不是VISIBLE也要画:
protected void di