http://www.eoeandroid.com/thread-35572-1-1.html
和上面描述的一样,就是一个framelayout,布局里面是两个view,重叠的,view1在下面,view2覆盖在view1上面,然后刷新view2的时候view1也跟着一起刷新了,不知道是怎么回事,奇怪了...

解决方案 »

  1.   

        很久不见。
        关于这个问题,我有个猜想:
        因为UI的绘制流程应该是这样的(刚才就说过是猜想的,错了别怪我):绘制一个区域的UI,总是从底向上画的。具体来说,重绘界面上的一个控件,那么肯定是从背景开始向上逐层绘制的。如果,不是这样的话,我们可以想象这样一个情况:万一某个控件是半透明的或者局部透明的,而在这个控件下层有个不断变化的背景(类似动态壁纸),那么,如果不是由下而上绘制的,后面的背景就会和周围脱节。
        其实,因为之前一段时间写过一个纯SurfaceView实现的App,上面的绘图都是由代码手动完成的,实现的过程中就采用了由下而上的策略。
        假设,系统采用了相同的策略,那么楼主的问题就可以解释了,因为view2是盖在view1上的,那么刷新view1的时候,view2就会被刷新,同理的,我想刷新view1也会导致view2的刷新。
        或者我们可以得到这样的结论:系统刷新控件UI的时候,系统实际关心的是控件所在的区域(Rect),而非控件本身。
      

  2.   

    有道理,我再看看view刷新的机制
      

  3.   

    http://www.msdowns.com/a/kaifawendang/Androidjichu/2011/0927/333.html
    看了一下这个,
    invalidateChild这个函数看来是会将parent里的所有childrens都绘制一遍的。所以应该是这样,如果framelayout里有N个重叠的view的话,是从底下往上刷新的。
      

  4.   

    不过虽然说是会重绘childrens,但是还是根据view自己的区域重绘的,如果不重叠就没有这个问题了。