想要讓系統繪製出你所需要的圖形,就必須告訴系統view的大小,所以,在繪製view時,先實現view的onmesure()方法。
在測量view之前,要先了解measurespec這個類,measurespec物件中包含了測量的模式和測量的大小;
measurespec.exactly 精確模式:當我們將控制項的layout_width屬性或者layout_height屬性指定為具體值的時候,這時候使用的是
measurespec.exactly模式
measurespec.at_most 最大值模式,當我們將控制項的layout_width屬性或者layout_height屬性指定為wrap_content時,控制項的大小隨子控制項的大小變化而變化。
measurespec.unspecfied 不指定大小測量模式,view想多大就多大。
檢視原始碼可以知道,super.onmeasure()方法最終將測量所得到的值傳給了setmeasureddimension()供系統呼叫。
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
測量寬度:
/**
* 測量寬度
* @param widthmeasurespec
* @return
*/private int mesurewidth(int widthmeasurespec) else
}return ret;
}
測量高度:(與寬度幾乎一樣)
/**
* 測量高度
* @param heightmeasurespec
* @return
*/private int measureheight(int heightmeasurespec) else
}return ret;
}
注:如果不重寫onmeasure()方法,預設情況下,設定wrap_content時,控制項會填充父窗體。
Android 自定義View 一
android的ui介面都是由view和viewgroup及其派生類組合而成的。其中,view是所有ui元件的基類,而viewgroup是容納這些元件的容器,其本身也是從view派生出來的。androidui介面的一般結構可參見下面的示意圖 可見,作為容器的viewgroup可以包含作為葉子節點的v...
android 自定義view 一
android自定義控制項分為兩類,一類是繼承view,一類是繼承viewgroup。由於直接繼承viewgroup是在子view的基礎上進行測量和定位的。自定義view大體上可以分類三類 接下來分析如何做,我們先看整體 public class customerrunline extends vi...
Android自定義View 自定義元件
自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...