如何把自定義控制元件的原理落實到程式碼上
步驟
1)自定義屬性的宣告與獲取
分析需要的自定義屬性;
在res/values/attrs.xml中進行宣告;
在Layout.xml檔案中進行使用
在View的構造方法中獲得我們自定義的屬性/宣告的屬性;
TypedArray 獲取所有的自定義屬性的集合,然後進行遍歷;
2)測量onMeasure()
測量模式和測量值,有三種測量模式
EXACTLY:一般是設定了明確的值或者是MATCH_PARENT
AT_MOST:表示子佈局限制在一個最大值內,一般為WARP_CONTENT
UNSPECIFIED:表示子佈局想要多大就多大,ListView ScrollView
MeasureSPEC
主要用於計算檢視的大小,即檢視的寬度和長度;
子類可以覆寫onMeasure()方法實現自己的計算檢視大小的方式,並透過setMeasuredDimension(width, height)儲存計算結果;
3)佈局onLayout()
自定義ViewGroup才有的方法,繼承自VierGroup,自定義View沒有的;編寫繼承自View/VierGroup的子類(TextView、LinearLayout等)
用於控制控制元件在螢幕中顯示的位置;
4)繪製onDraw()
呼叫Canvas裡面的api進行繪製操作;
draw操作利用前兩部得到的引數,將檢視顯示在螢幕上;
5)onTouchEvent()
觸控事件的實現,響應使用者操作。
6)onInterceptTouchEvent()
事件分發和攔截,只有自定義ViewGroup才有的方法;
在佈局檔案中使用時,使用全類名;
如何把自定義控制元件的原理落實到程式碼上
步驟
1)自定義屬性的宣告與獲取
分析需要的自定義屬性;
在res/values/attrs.xml中進行宣告;
在Layout.xml檔案中進行使用
在View的構造方法中獲得我們自定義的屬性/宣告的屬性;
TypedArray 獲取所有的自定義屬性的集合,然後進行遍歷;
2)測量onMeasure()
測量模式和測量值,有三種測量模式
EXACTLY:一般是設定了明確的值或者是MATCH_PARENT
AT_MOST:表示子佈局限制在一個最大值內,一般為WARP_CONTENT
UNSPECIFIED:表示子佈局想要多大就多大,ListView ScrollView
MeasureSPEC
主要用於計算檢視的大小,即檢視的寬度和長度;
子類可以覆寫onMeasure()方法實現自己的計算檢視大小的方式,並透過setMeasuredDimension(width, height)儲存計算結果;
3)佈局onLayout()
自定義ViewGroup才有的方法,繼承自VierGroup,自定義View沒有的;編寫繼承自View/VierGroup的子類(TextView、LinearLayout等)
用於控制控制元件在螢幕中顯示的位置;
4)繪製onDraw()
呼叫Canvas裡面的api進行繪製操作;
draw操作利用前兩部得到的引數,將檢視顯示在螢幕上;
5)onTouchEvent()
觸控事件的實現,響應使用者操作。
6)onInterceptTouchEvent()
事件分發和攔截,只有自定義ViewGroup才有的方法;
在佈局檔案中使用時,使用全類名;