自定義view需要重寫兩個函式:onmeasure() 和 ondraw()。
onmeasure()用來測量view的大小。
測量中的三種模式
exactly 當我們為view 精確的指定它的大小的時候,還有指定為match_parent時會使用該模式
at_most 當view屬性wrap_content的時候會使用這個模式
unspecified 這種模式我暫時不知道什麼時候會被呼叫自己各種呼叫方式都試過都沒呼叫過,等以後遇到了補充進來
自定義view 預設支援exactly 如果想讓它支援
wrap_content屬性就要重寫onmeasure()。
自定義view 一定要有兩個建構函式:public myview (context context)()和public myview ( context context,attributrset attrs)
ondraw()就是用來進行繪製我們需要的效果的,用canva 進行繪製。
樣例**:
public classmyviewextendsview注:這段**是繼承於view 不需要單獨建立xml,布局寫在mainactivity的布局檔案中就可以publicmyview(context context, attributeset attrs)
private intgetmysize(intdefaultsize,intmeasurespec)
casemeasurespec.at_most:
casemeasurespec.exactly:
}returnmysize;
}@override
protected voidonmeasure(intwidthmeasurespec,intheightmeasurespec)
@override
protected voidondraw(canvas canvas)
}
布局**:
<linearlayoutxmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.zobject.myview.mainactivity">注:自定義view一定要寫完整的包名。<com.example.zobject.myview.myviewandroid:layout_width="wrap_content"android:layout_height="100px"android:background="#ff0000"/>
linearlayout>
效果圖
自定義view group 在後續複習中補充,還有canvas在後續中要寫一篇。
Android自定義控制項之自定義View 二
效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...
Android之自定義控制項
1.繼承view,view可以分為三種,基本的view,容器view,布局view 典型的view 如 imageview textview 容器類的view 如 listview gridview viewgroup 布局類的view 如 framelayout gridview linealay...
Android自定義控制項之自定義組合控制項(三)
前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理 一 自定義屬性android自定義控制項之自定義屬性 二 今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。1.第一種方式 直接在每個xml布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...