亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android的setVisibility(View.GONE)无效的问题及原因分析(转)相关的知识,希望能为你提供帮助。
出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉setFillAfter(true)语句即可。
【Android的setVisibility(View.GONE)无效的问题及原因分析(转)】实验证明只要在setVisibility之前设置View的mCurrentAnimation为null就可以,因此调用setAnimation(null)也是可以的。从源码来看setFillAfter为false时也会间接导致调用clearAnimation,而clearAnimation在这里使setVisibility有效的原因也是置mCurrentAnimation为null了。
setFillAfter为false时间接导致clearAnimation:
文章图片
而mCurrentAnimation使GONE无效的初步分析很可能是下面的代码造成:
文章图片
在dispatchDraw子View的时候,尽管不为VISIBLE,由于是||的关系,也会导致drawChild被调用。而drawChild的代码如下:
文章图片
/** * Draw one child of this View Group. This method is responsible for getting * the canvas in the right state. This includes clipping, translating so * that the child\'s scrolled origin is at 0, 0, and applying any animation * transformations. * * @param canvas The canvas on which to draw the child * @param child Who to draw * @param drawingTime The time at which draw is occurring * @return True if an invalidate() was issued */ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { return child.draw(canvas, this, drawingTime); }
文章图片
转自:http://www.cnblogs.com/albert1017/p/4724435.html
推荐阅读
- com.android.internal.os.ZygoteInit$MethodAndArgsCaller 解决
- 理解使用Gradle编译打包Android apk
- 安卓TextView完美展示html格式代码
- android如何finish应用程序通过startActivityForResult打开的activity
- Appium自动化时,如何快速获得Android app的包名和启动页
- android 按menu键解锁功能的开关
- android shell命令screenrecord和uptime
- Android JNI -基础篇
- Android6.0权限申请工具类