在使用补间动画时,若使用了Animation.setFillAfter方法,即便viewGroup设置成了GONE,系统也会将child view绘制出来,也就意味着可以点击。具体源码分析如下:
在viewGroup的dispatchDraw方法中有如下代码:
首先看一下View的clearAnimation():
dispatchDraw
在3537及3538行有transientChild.getAnimation方法,若获取到的animation不为空,也会绘制child view,接下来继续看view的getAnimation方法:
getAnimation
我们看看mCurrentAnimation在什么时候会置空,一个是onDetachedFromWindowInternal,另一个就是接下来需要展示的:
clearAnimation
接下来我们看看fillAfter与mCurrentAnimation的关系,在viewGroup中:
finishAnimatingView
在第6269行,只有未设置setFillAfter才会在动画结束时clearAnimation。
到这里,我们差不多已经明白了Animation使用setFillAfter会引起的问题了。记录下来以作参考。