Android使用补间动画的setFillAfter引发的问题

在使用补间动画时,若使用了Animation.setFillAfter方法,即便viewGroup设置成了GONE,系统也会将child view绘制出来,也就意味着可以点击。具体源码分析如下:

在viewGroup的dispatchDraw方法中有如下代码:

首先看一下View的clearAnimation():

Android使用补间动画的setFillAfter引发的问题_第1张图片
dispatchDraw

在3537及3538行有transientChild.getAnimation方法,若获取到的animation不为空,也会绘制child view,接下来继续看view的getAnimation方法:

Android使用补间动画的setFillAfter引发的问题_第2张图片
getAnimation

我们看看mCurrentAnimation在什么时候会置空,一个是onDetachedFromWindowInternal,另一个就是接下来需要展示的:

Android使用补间动画的setFillAfter引发的问题_第3张图片
clearAnimation

接下来我们看看fillAfter与mCurrentAnimation的关系,在viewGroup中:

Android使用补间动画的setFillAfter引发的问题_第4张图片
finishAnimatingView

在第6269行,只有未设置setFillAfter才会在动画结束时clearAnimation。

到这里,我们差不多已经明白了Animation使用setFillAfter会引起的问题了。记录下来以作参考。

你可能感兴趣的:(Android使用补间动画的setFillAfter引发的问题)