如何自定義控制項

2021-08-01 05:32:39 字數 1263 閱讀 1821

1、自定義屬性的宣告與獲取

1.1分析需要的自定義屬性

1.2在res/values/attrs.xml中定義自定義屬性

1.3在layout的xml檔案中宣告使用

1.4在自定義view中的構造方法中獲取使用

2、測量onmeasure

2.1求出子檢視的個數

通過getchildcount()方法獲取子view的個數

2.2測量子檢視的寬度和高度

2.2.1通過getchildat()方法獲取子view,然後通過子view的measure(int wspec, int hspec)方法測量。

2.2.2通過viewgroup的measurechild(subview, int wspec, int hspec);來測量某個子view的寬和高。

2.2.3通過viewgroup的measurechildren(int wspec, int hspec);方法來測量,前提是所有的子view都是寬高相同的,內部呼叫了measurechild方法。

2.2.4通過 measurechildwithmargins(subview, intwspec, int wused, int hspec, int hused); 測量某乙個子view,多寬,多高, 內部加上了viewgroup的padding值、margin值和傳入的寬高wused、hused 。

2.3根據子檢視的寬度和高度來求出viewgroup的寬度和高度

通過子view的getmeasuredwidth()方法和getmeasureheight()方法來得到子view的寬和高。然後通過setmeasureddimension(width, height);方法來設定viewgroup的寬度和高度。

3、布局onlayout(viewgroup)

決定子view的位置,先獲取子view然後通過view的layout方法來設定view的位置。

4、繪製ondraw

如果是自定義viewgroup,則不需要呼叫該方法繪製,因為系統會預設繪製子view。

5、ontouchevent

通過motionevent來獲取使用者的操作,進而實現相關的邏輯操作。

如果返回值為true,則會告訴該viewgroup的父view,該viewgroup已經處理好該事件。

6、onintercepttouchevent(viewgroup)

如果返回值為true,則代表該容器處理此攔截的事件,然後在ontouchevent()方法中處理該事件。如果返回值為false,則代表容器不會處理攔截的事件,將會繼續向下傳遞事件。

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項

首先是以下這幾項,attribute defaultproperty指定元件的預設屬性,toolboxdata指定當從ide工具中的 工具箱中拖動自定義控制項時為它生成的預設標記 defaultproperty text toolboxdata mycontrol runat server 上面這些...

自定義控制項

新聞管理 using system using system.collections.generic using system.linq using system.web using system.web.ui using system.web.ui.webcontrols namespace ne...