自定義View總結筆記

2021-08-21 13:38:47 字數 2358 閱讀 7292

例項**1:

//**中直接new出來的

public cakeview(context context)

//布局中引用

public cakeview(context context, @nullable attributeset attrs)

//布局中應用,並且帶style(不常用)

public cakeview(context context, @nullable attributeset attrs, int defstyleattr)

其中用的比較多的是乙個引數和兩個引數的建構函式。兩個引數的建構函式的第二個引數attributeset是指這個自定義view的屬性值,就是下面**中的layout_width,layout_height,defultsize等屬性。

例項**2:

這些屬性可以通過obtainstyledattributes()方法來獲取屬性值.

例項**3:

typedarray typedarray = context.obtainstyledattributes(attrs, r.styleable.recview);

defultsize = (int) typedarray.getdimension(r.styleable.recview_defultsize, 200);

typedarray.recycle();

其中defultsize屬性是我自定義的屬性,自定義屬性在res--> values 目錄下新建乙個命名為attrs的xml檔案。

例項**4:

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

上述獲取屬性值的**例項中,obtainstyledattributes()方法獲取的是自定義view的屬性集,再通過getdimension(...)或getboolean(...)方法獲取具體的自定義屬性。獲取完記得呼叫typedarray.recycle()**資源,不然可能導致記憶體洩漏。

自定義view的流程是先測量(onmeasure() ),測量完成之後再繪製到螢幕上( ondraw() )

onmeasure()方法:view的測量,也就是測量view的寬高尺寸。

例項**5:

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

public int getmysize(int defultsize, int measurespec)

return msize;

}

其中onmeasure()方法中有兩個引數:widthmeasurespec,heightmeasurespec.這兩個引數是父控制項傳遞給子view的測量要求,他們裡面包含父控制項傳遞給子view的測量模式和父控制項傳遞給子控制項的測量值,而測量模式又分為三種,如上面的例項**:

unspecified:指子控制項想要多大就多大,recycleview和listview,scrollview就是這種模式。

at_most:相當於wrap_content

exacitly:相當於match_parent 或者是固定尺寸,如:100dp

測量模式可以通過measurespec.getmode()獲取,如上述**例項。其中getsize()方法是父控制項傳遞給子view的測量值,上述**例項**5的意思是:如果例項**2中設定的寬高是固定200dp,或者是match_parent,此時view的父控制項傳遞給子view的測量模式是exacitly,父控制項傳遞給子view的測量值等於自己設定的寬高值或者是推薦值),如果**例項2中設定的寬高為wrap_content,此時父控制項傳遞給子view的測量模式是atm_most,測量值使用自己定義的預設值。測量完成之後一定要呼叫setmeasureddimension(mwsize, mhsize)方法儲存測量值。

ondraw()方法:將測量完成的view繪製到螢幕上

例項**6:

@override

protected void ondraw(canvas canvas)

canvas是畫布,mpaint是畫筆,paint最好在構造方法中建立,因為如果在onmeasure和ondraw方法都是頻繁的被呼叫。通過paint畫筆在canvas畫布上繪製你需要的圖形。

自定義View筆記

1.帶刪除按鈕的listview 將觸控事件交給手勢處理器處理 return gesturedetector.ontouchevent event override public boolean ondown motionevent e return false override public vo...

自定義View的總結

總結來自官方文件 首先android裡邊的檢視是以樹形結構組織起來的。檢視樹的繪製是從檢視的根節點開始的。這就要求去測量和繪製這個檢視樹時遍歷檢視樹上的每乙個view。每乙個viewgroup也相當於乙個樹,他也有責任保證他的每乙個子view的draw方法會被呼叫。同樣的每乙個子view也有責任繪製...

自定義View筆記 一

注 該筆記是整理學習鴻洋大神自定義view系列部落格的部分知識點。自定義view 自定義控制項 四大步驟 1.自定義view的屬性 2.在view的構造方法中獲取自定義的屬性 3.重寫onmesure 不是選項 4.重寫ondraw 自定義view屬性 在res values下建立乙個attrs.x...