Android控制項架構與自訂控制項詳解

來源:互聯網
上載者:User

標籤:

基於 《android 群英傳 》的讀書筆記

View的測量—onMeasure()

測量的模式可以有以下三種:
EXACTLY
即精確值模式,當我們將控制項的layout_width屬性或layout_height屬性指定為具體參數值時,系統使用的就是EXACTLY
AT_MOST
即最大值模式,當控制項的layout_width屬性或layout_hright屬性是warp_content時,控制項大小一般隨著控制項的子控制項或內容的變化而變化,此時控制項尺寸只要不超過父控制項允許的尺寸即可
UNSPECIFIED
不指定其大小的測量模式,view想多大就多大,通常情況下在繪製view時才會使用。

view類預設的onMeasure()方法只支援EXACTLY的模式,所以如果在自訂控制項的時候不重寫onMeasure()方法的話,就只能使用EXACTLY模式

View 的 繪製——onDraw()

要想在android的介面上繪製相應的映像,就必須在Canvas上進行繪製。Canvas就像是一個畫板,使用paint就可以在上面作畫了。
一般情況下,可以使用重寫view類中的onDraw()方法來繪圖,onDraw()中有一個參數,就是Canvas canvas對象,使用這個對象就可以進行繪圖。

ViewGroup的測量

viewgroup回去管理其子view,其中一個管理項目就是負責子view的顯示大小。當viewgroup的大小為warp_content時,viewgroup就需要對子view進行遍曆,以便獲得所有子view 的大小,從而決定自己的大小,而在其他模式下會通過具體的指定來設定自身的大小
viewgroup在測量時通過遍曆所有的子view,從而調用子view的Measure方法來獲得每一個子view的測量結果,前面所說的對view的測量,就是這裡執行的。

ViewGroup的繪製

viewgroup通常情況下不需要繪製,因為它本身沒有需要繪製的東西,如果不是指定viewgroup的背景顏色,那麼viewgroup的onDraw()方法都不會被調用。但是,viewgroup會使用dispatchDraw()方法來繪製其子view,其過程同樣是通過遍曆所有的子view,並調用子view的繪製方法來完成繪製工作。

自訂view

在自訂View時,我們通常回去重寫onDraw()方法來繪製view的顯示內容。如果該view還需要使用wrap_content屬性,那麼還必須重寫onMeasure()方法。另外,通過自訂attrs屬性,還可以設定新的屬性值。

對現有控制項的擴充
  1.對TextView進行擴充  2.閃動的文字效果
建立複合控制項
  TopBar  1.定義屬性    系統提供了TypedArray這樣的資料結構來擷取自訂的屬性集--通     過一個方法,將你在atts.xml中定義的declare-styleable的所有    屬性的值儲存到TypedArray中。需要注意的是,當擷取完所有屬性  2.群組控制項  3.引用UI模板    在引用前必須指定引用第三方控制項的名字空間。
View來實現全新的控制項
  建立一個自訂view的痛點在於繪製控制項和實現互動。  通常需要繼承View類,並重寫它的onDraw(),onMeasure()等方法來  實現繪製邏輯,同時需要重寫onTouchEvent()等觸控事件來實現互動    邏輯
自訂ViewGroup
  側滑效果

Android控制項架構與自訂控制項詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.