版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!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 使用屬性。
在構造函數中擷取屬性值
或者:

實作上面的效果我們大緻需要分成這幾步
在res/values/ 下建立一個attrs.xml 來聲明自定義view的屬性
一個繼承view并複寫部分函數的自定義view的類
一個展示自定義view 的容器界面
1.自定義view命名為myview,它有一個屬性值,格式為color、
2.在構造函數擷取獲得view的屬性配置和複寫ondraw和ontouchevent函數實作繪制界面和使用者事件響應。
這裡通過不斷的更新目前位置坐标和重新繪制圖形實作效果,要注意的是使用typedarray後一定要記得recycle(). 否則會對下次調用産生影響。
3.把myview加入到activity_main.xml布局裡面
4.最後是mainactivity
具體的view要根據具體的需求來,比如我們要側滑删除的listview我們可以繼承listview,監聽側滑事件,顯示删除按鈕實作功能。