例項**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...