zoukankan      html  css  js  c++  java
  • Android invalidate()方法 requestLayout()方法分析

    强调一点的就是,在onMeasure(),onLayout(),onDraw()这三个流程中,Google已经帮我们把draw()过程框架已经写好了,自定义的ViewGroup只需要实现
    measure()过程和layout()过程即可 。

    这三种情况,最终会直接或间接调用到三个函数,分别为invalidate(),requsetLaytout()以及requestFocus() ,接着
    这三个函数最终会调用到ViewRoot中的schedulTraversale()方法,该函数然后发起一个异步消息,消息处理中调用
    performTraverser()方法对整个View进行遍历。

    invalidate()方法 :

    说明:请求重绘View树,即draw()过程,假如视图发生大小没有变化就不会调用layout()过程,并且只绘制那些“需要重绘的”
    视图,即谁(View的话,只绘制该View ;ViewGroup,则绘制整个ViewGroup)请求invalidate()方法,就绘制该视图。

    一般引起invalidate()操作的函数如下:
    1、直接调用invalidate()方法,请求重新draw(),但只会绘制调用者本身。
    2、setSelection()方法 :请求重新draw(),但只会绘制调用者本身。
    3、setVisibility()方法 : 当View可视状态在INVISIBLE转换VISIBLE时,会间接调用invalidate()方法,
    继而绘制该View。
    4 、setEnabled()方法 : 请求重新draw(),但不会重新绘制任何视图包括该调用者本身。

    requestLayout()方法 :会导致调用measure()过程 和 layout()过程 。

    说明:只是对View树重新布局layout过程包括measure()和layout()过程,不会调用draw()过程,但不会重新绘制
    任何视图包括该调用者本身。

    一般引起invalidate()操作的函数如下:
    1、setVisibility()方法:
    当View的可视状态在INVISIBLE/ VISIBLE 转换为GONE状态时,会间接调用requestLayout() 和invalidate方法。
    同时,由于整个个View树大小发生了变化,会请求measure()过程以及draw()过程,同样地,只绘制需要“重新绘制”的视图。

    requestFocus()函数说明:

    说明:请求View树的draw()过程,但只绘制“需要重绘”的视图。

  • 相关阅读:
    java中的锁
    如何解决ORA-12547: TNS:lost contact错
    MVC Json 回报
    热12应建议网站模板(免费下载点)
    python爬行动物集合360联想词搜索
    Cocos2d-x 3.1.1 学习日志8--2分钟让你知道cocos2d-x3.1.1 文本类别
    两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】
    Android获得Manifest在<meta-data>元件的值
    40地点40投资者接下来的几年
    【编程之美】java二进制实现重建
  • 原文地址:https://www.cnblogs.com/diyishijian/p/7838235.html
Copyright © 2011-2022 走看看