即興的靈感

          思維是一種藝術; 藝術需要靈感。

          博客好友

          最新評論

          Android中UI視圖之試圖繪制機制

          在Android中,當一個活動Activity接收到焦點時,它將被要求繪制它自己的布局。Android框架將處理這個繪畫的過程,但是這個Activity活動必須提供它的布局層次的根節點。

            繪畫從布局的根節點開始。它被要求來測量和繪制布局樹。繪畫通過遍歷布局樹并渲染每個和失效區域相交的視圖來處理。相應的,每個視圖組負責請求繪制它的子視圖(通過draw() 方法)而每個視圖負責畫它自己。因為這個樹是順序遍歷的,這意味著先畫父節點(也就是在屏幕后面),然后按照樹中出現的順序畫其同層次節點。


            框架將不會畫不在失效區域的視圖,而且還將會幫你畫視圖背景。

            你可以強制一個視圖被重畫,通過調用invalidate()。

            繪畫布局共有兩步:一個度量過程和一個布局過程。度量過程在measure(int, int)里實現且是一個自頂向下的視圖樹遍歷。每個視圖在遞歸時往下推送尺寸規格。在度量過程的最后,每個視圖都已經保存了自己的度量。第二個過程發生在layout(int, int, int, int) 中并且也是自頂向下。在這個過程中,每個父節點負責定位它的所有子節點,通過使用在度量過程中計算得到的尺寸。

            當一個視圖的measure()方法返回時,它的getMeasuredWidth()和getMeasuredHeight() 值必須被設置,以及所有這個視圖子節點的值。一個視圖的度量的寬度和高度值必須符合父視圖引入的限制。這確保在度量過程之后,所有父節點接受所有它們的子節點的度量值。一個父視圖可能會在其子視圖上多次調用measure()方法。比如,父視圖可能會通過未指定的尺寸調用measure來發現它們的大小,然后使用實際數值再次調用measure(),如果所有子視圖未做限制的尺寸總合過大或過小(也即是,如果子視圖之間不能對各自占據的空間達成共識的話,父視圖將會干預并設置第二個過程的規則)。

            要開始一個布局,可調用requestLayout()。這個方法通常在視圖認為它自己不再適合它當前的邊界的情況下被調用。

            度量過程使用兩個類來交流尺寸。View.MeasureSpec類被視圖用來告訴它們的父視圖它們想如何被度量和定位。基礎的LayoutParams類僅僅描述了視圖想有多大(高和寬)。對于每個維度,它可以指定下面之一:
          · 一個準確的數值
          · FILL_PARENT, 這意味著視圖想和父視圖一樣大(減掉填充padding)。
          · WRAP_CONTENT, 這意味著視圖只想有剛好包裝其內容那么大(加上填充)

            對于不同的ViewGroup子類,有相應的LayoutParams子類。比如,相對布局RelativeLayout有它自己的LayoutParams子類,這包含了能夠讓子視圖橫向和豎向居中顯示的能力。

            度量規格(MeasureSpecs)被用來沿著樹從父到子的下傳度量需求。一個MeasureSpecs可以是下面三種模式之一:
          ·UNSPECIFIED: 這被父視圖用來決定其子視圖期望的尺寸。比如,一個線性布局可能在它的子視圖上調用measure() on its child,通過設置其高度為UNSPECIFIED 以及一個寬度為EXACTLY 240,來找出這個子視圖在給定240像素寬度的情況下需要顯示多高。
          ·EXACTLY: 這被父視圖用來給子視圖強加一個準確的尺寸。子視圖必須使用這個大小,并確保其所有的后代將適合這個尺寸。
          ·AT_MOST: 這被父視圖用來給子視圖強加一個最大尺寸。子視圖必須確保它自己以及所有的后代都適合這個尺寸。文章地址



          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調華麗/簡單生活/完美人生

          posted on 2010-10-16 10:02 poetguo 閱讀(1655) 評論(0)  編輯  收藏 所屬分類: Android

          主站蜘蛛池模板: 九龙县| 祁东县| 行唐县| 陇川县| 尼木县| 宁津县| 玛沁县| 岳阳市| 同德县| 沾化县| 江门市| 萨嘎县| 克山县| 吉安县| 钦州市| 渭南市| 丘北县| 龙州县| 龙陵县| 周至县| 福贡县| 开平市| 安溪县| 台中县| 马关县| 东安县| 吉安市| 和顺县| 镇远县| 安泽县| 海晏县| 定南县| 治多县| 兴城市| 大英县| 瑞金市| 丹巴县| 资阳市| 武定县| 吉隆县| 扶风县|