<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    即興的靈感

    思維是一種藝術(shù); 藝術(shù)需要靈感。

    博客好友

    最新評(píng)論

    Android中UI視圖之試圖繪制機(jī)制

    在Android中,當(dāng)一個(gè)活動(dòng)Activity接收到焦點(diǎn)時(shí),它將被要求繪制它自己的布局。Android框架將處理這個(gè)繪畫的過程,但是這個(gè)Activity活動(dòng)必須提供它的布局層次的根節(jié)點(diǎn)。

      繪畫從布局的根節(jié)點(diǎn)開始。它被要求來測(cè)量和繪制布局樹。繪畫通過遍歷布局樹并渲染每個(gè)和失效區(qū)域相交的視圖來處理。相應(yīng)的,每個(gè)視圖組負(fù)責(zé)請(qǐng)求繪制它的子視圖(通過draw() 方法)而每個(gè)視圖負(fù)責(zé)畫它自己。因?yàn)檫@個(gè)樹是順序遍歷的,這意味著先畫父節(jié)點(diǎn)(也就是在屏幕后面),然后按照樹中出現(xiàn)的順序畫其同層次節(jié)點(diǎn)。


      框架將不會(huì)畫不在失效區(qū)域的視圖,而且還將會(huì)幫你畫視圖背景。

      你可以強(qiáng)制一個(gè)視圖被重畫,通過調(diào)用invalidate()。

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

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

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

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

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

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



    ?
    鳳凰涅槃/浴火重生/馬不停蹄/只爭(zhēng)朝夕
    ???? 隱姓埋名/低調(diào)華麗/簡(jiǎn)單生活/完美人生

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

    主站蜘蛛池模板: 亚洲国产综合久久天堂| 免费大香伊蕉在人线国产 | 久久精品国产亚洲AV高清热| 一级片在线免费看| 亚洲人成国产精品无码| 国产高清视频免费在线观看| 国产国拍亚洲精品福利| 一级做a免费视频观看网站| 久久精品国产亚洲Aⅴ香蕉| 成人免费无码H在线观看不卡| 亚洲综合AV在线在线播放| a在线观看免费网址大全| 亚洲免费在线播放| 黄色永久免费网站| 亚洲精品无码aⅴ中文字幕蜜桃| 免费被黄网站在观看| 黄色大片免费网站| 亚洲一区二区三区香蕉| 国产精品免费AV片在线观看| 久久久久亚洲AV无码专区首JN| 114级毛片免费观看| 亚洲欧美国产精品专区久久| 国产大片51精品免费观看| 亚洲免费日韩无码系列| 亚洲AV无码国产精品色午友在线 | 国产A在亚洲线播放| 久久ww精品w免费人成| 日韩亚洲不卡在线视频中文字幕在线观看| 免费精品国产日韩热久久| 久久久久久亚洲精品无码| 久久久久无码专区亚洲av| 8090在线观看免费观看| 亚洲欧美日韩中文字幕一区二区三区 | 久久乐国产综合亚洲精品| 国产jizzjizz视频全部免费| 成全在线观看免费观看大全| 欧洲 亚洲 国产图片综合| 综合亚洲伊人午夜网| 欧美在线看片A免费观看| 久久精品免费大片国产大片| 国产婷婷综合丁香亚洲欧洲|