天天看點

[Android] 自定義控件詳解 一、實作步驟 二、哪些方法需要被重寫 三.自定義控件的三種方式 四.自定義屬性的兩種方法五. 自定義随手指移動的小球(小例子)

版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!http://blog.csdn.net/amazing7/article/details/51303289

  1. 繼承view類或其子類 

  2. 複寫view中的一些函數

 3.為自定義view類增加屬性(兩種方式)

 4.繪制控件(導入布局)

 5.響應使用者事件

 6.定義回調函數(根據自己需求來選擇)

ondraw()

  view中ondraw()是個空函數,也就是說具體的視圖都要覆寫該函數來實作自己的繪制。對于viewgroup則不需要實作該函數,因為作為容器是“沒有内容“的(但必須實作dispatchdraw()函數,告訴子view繪制自己)。

onlayout()

  主要是為viewgroup類型布局子視圖用的,在view中這個函數為空函數。

onmeasure()

  用于計算視圖大小(即長和寬)的方式,并通過setmeasureddimension(width, height)儲存計算結果。

ontouchevent

  定義觸屏事件來響應使用者操作。 

還有一些不常用的方法:

  onkeydown 當按下某個鍵盤時     onkeyup 當松開某個鍵盤時    ontrackballevent 當發生軌迹球事件時    onsizechange() 當該元件的大小被改變時    onfinishinflate() 回調方法,當應用從xml加載該元件并用它建構界面之後調用的方法    onwindowfocuschanged(boolean) 當該元件得到、失去焦點時    onattachedtowindow() 當把該元件放入到某個視窗時    ondetachedfromwindow() 當把該元件從某個視窗上分離時觸發的方法    onwindowvisibilitychanged(int): 當包含該元件的視窗的可見性發生改變時觸發的方法  

1. 繼承已有的控件

  當要實作的控件和已有的控件在很多方面比較類似, 通過對已有控件的擴充來滿足要求。

2. 繼承一個布局檔案

  一般用于自定義組合控件,在構造函數中通過inflater和addview()方法加載自定義控件的布局檔案形成圖形界面(不需要ondraw方法)。

3.繼承view

  通過ondraw方法來繪制出元件界面。

  1.在布局檔案中直接加入屬性,在構造函數中去獲得。

布局檔案:

擷取屬性值:

2.在res/values/ 下建立一個attrs.xml 來聲明自定義view的屬性。

可以定義的屬性有:

attrs.xml進行屬性聲明

添加到布局檔案

這裡注意命名空間: 

字首:textcolor 使用屬性。

在構造函數中擷取屬性值

 或者:

[Android] 自定義控件詳解 一、實作步驟 二、哪些方法需要被重寫 三.自定義控件的三種方式 四.自定義屬性的兩種方法五. 自定義随手指移動的小球(小例子)

實作上面的效果我們大緻需要分成這幾步

在res/values/ 下建立一個attrs.xml 來聲明自定義view的屬性

一個繼承view并複寫部分函數的自定義view的類

一個展示自定義view 的容器界面

1.自定義view命名為myview,它有一個屬性值,格式為color、

2.在構造函數擷取獲得view的屬性配置和複寫ondraw和ontouchevent函數實作繪制界面和使用者事件響應。

  這裡通過不斷的更新目前位置坐标和重新繪制圖形實作效果,要注意的是使用typedarray後一定要記得recycle(). 否則會對下次調用産生影響。 

[Android] 自定義控件詳解 一、實作步驟 二、哪些方法需要被重寫 三.自定義控件的三種方式 四.自定義屬性的兩種方法五. 自定義随手指移動的小球(小例子)

 

3.把myview加入到activity_main.xml布局裡面

4.最後是mainactivity

具體的view要根據具體的需求來,比如我們要側滑删除的listview我們可以繼承listview,監聽側滑事件,顯示删除按鈕實作功能。

繼續閱讀