自定義View理解

2021-08-18 11:20:15 字數 1784 閱讀 8318

整合view:view流程

onmeasure() (在這個方法裡指定自己的寬高) -> ondraw() (繪製自己的內容)

整合viewgroup:viewgroup流程 

onmeasure() (指定自己的寬高, 所有子view的寬高)-> onlayout() (擺放所有子view) -> ondraw() (繪製內容)

widthmode = measurespec.getmode(widthmeasurespec);

widthsize = measurespec.getsize(widthmeasurespec);

設定自定義view的尺寸大小(在onmeasure的最後呼叫)

setmeasureddimension(width, height);

重新整理view(

invalidate() postinvalidate()

)invalidate()與postinvalidate()這兩個都是重新整理view的api,它們主要的區別是invalidate()可以在主線程(ui執行緒)中呼叫,而不能在子執行緒中呼叫,若在子執行緒中進行重新整理view的操作需要配合handler來使用。而postinvalidate()可以在子執行緒中直接呼叫。

①第一步:res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?>

xmlns:hc=""

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="100dp"

hc:default_size="100dp"

/>

hc""。

我們的自定義的view裡面把我們自定義的屬性的值取出來,在建構函式中,還記得有個attributeset屬性嗎?就是靠它幫我們把布局裡面的屬性取出來。

context.obtainstyledattributes

(attrs, r.styleable.myview);

//第乙個引數為屬性集合裡面的屬性,r檔名稱:

r.styleable+屬性集合名稱+下劃線+屬性名稱

//第二個引數為,如果沒有設定這個屬性,則設定的預設的值

de****tsize = a.getdimensionpixelsize(r.styleable.myview_default_size, 100);

//最後記得將typedarray物件**

paddingmargin(viewgroup情況)的屬性將失效

1. 啟動執行緒/ 動畫:使用view.onattachedtowindow(),因為該方法呼叫的時機是當包含view的activity啟動的時刻 

2. 停止執行緒/ 動畫:使用view.ondetachedfromwindow(),因為該方法呼叫的時機是當包含view的activity退出或當前view被remove的時刻

Android自定義View 自定義元件

自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

自定義View筆記(二) 深入理解自定義屬性

注 該筆記是整理學習鴻洋大神自定義view系列部落格的部分知識點。一 typedarray 與 attributeset 獲取 view 屬性的區別 attributeset獲取方式 public mytextview context context,attributeset attrs typed...