zoukankan      html  css  js  c++  java
  • Android的setVisibility(View.GONE)无效的问题及原因分析

    出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉setFillAfter(true)语句即可。

    实验证明只要在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://bbs.csdn.net/topics/390311261

    http://blog.csdn.net/xxxzhi/article/details/8846248

    http://stackoverflow.com/questions/8690029/why-doesnt-setvisibility-work-after-a-view-is-animated

    http://www.cnblogs.com/liulipeng/p/3962101.html

  • 相关阅读:
    (IOCP)-C#高性能Socket服务器的实现
    GraphQL和RESTful的区别
    HTTP Client Performance Improvements
    foobar2000 iOS使用,并连接PC的歌曲进行播放
    Spring中基于AOP的@AspectJ
    Spring中基于AOP的XML架构
    Spring框架的AOP
    Spring的AOP AspectJ切入点语法详解(转)
    Spring中实现自定义事件
    Spring的事件处理
  • 原文地址:https://www.cnblogs.com/albert1017/p/4724435.html
Copyright © 2011-2022 走看看