初·Android View的繪製流程

weixin_34320159發表於2017-02-15

我們按照這個繪製流程來學習:

  1. xml佈局檔案的解析
  2. 測量onMeasure
  3. 佈局onLayout(ViewGroup)
  4. 繪製onDraw

onMeasure 測量

父View模式 父View寬高 子View設定寬高 子View測量寬高 子View測量模式
EXACTLY 父View大小是確切的,例如(100,200) 子View </br>(match_parent,match_parent) (100,200) EXACTLY
EXACTLY 父View大小是確切的,例如(100,200) 子View(200,100) 子View的測量大小就是(200,100),只是繪製展示後超不部分被遮擋 EXACTLY
EXACTLY 父View大小是確切的,例如(100,200) 子View</br>(wrap_content,wrap_content) 子View大小不確定,暫定父View的大小(100,200),最大不能超過父View大小 AT_MOST
---- -------------- ------------ ----------- -----------
AT_MOST 父View大小不確定,父View是Match或Wrap,但是其父View也給它設定了一個最大值,就是MeasureSpec 的size,大小不能超過這個最大值,父View(size,size) 子View(match_parent,match_parent) 子View填充父View,所以(size,size),大小不能超過size AT_MOST
AT_MOST 父View大小不確定,父View是Match或Wrap,但是其父View也給它設定了一個最大值,就是MeasureSpec 的size,大小不能超過這個最大值,父View(size,size) 子View(200,100) 子View的測量大小就是(200,100),只是繪製展示後超不部分被遮擋 EXACTLY
AT_MOST 父View大小不確定,父View是Match或Wrap,但是其父View也給它設定了一個最大值,就是MeasureSpec 的size,大小不能超過這個最大值,父View(size,size) 子View(wrap_content,wrap_content) 子View大小不確定,暫定父View的大小(size,size),最大不能超過父View大小 AT_MOST
---- -------------- ------------ ----------- -----------
UNSPECIFIED 父View大小未指定,表示沒有任何束縛和約束,沒有最大值限制,可以得到任意想要的大小 子View(match_parent,match_parent) 因為父View大小未指定,想要多大就多大,所以match 父View沒有任何意義 ,則寬高(0,0) AT_MOST
UNSPECIFIED 父View大小未指定,表示沒有任何束縛和約束,沒有最大值限制,可以得到任意想要的大小 子View(200,100) 子View的測量大小就是(200,100),只是繪製展示後超不部分被遮擋 EXACTLY
UNSPECIFIED 父View大小未指定,表示沒有任何束縛和約束,沒有最大值限制,可以得到任意想要的大小 子View(wrap_content,wrap_content) 子View大小不確定,暫定等於父View的大小,父View的大小沒指定,所以寬高沒意義(0,0) AT_MOST

相關文章