Android中使用自定義View

一、自定義VIEW的詳細步驟

在自定義view的時候,其實很簡單,只需要知道3步驟:
1.測量——onMeasure():決定View的大小
2.佈局——onLayout():決定View在ViewGroup中的位置
3.繪製——onDraw():如何繪製這個View。

一般自定義view需要遵循上面的步驟

二、Measure()

Measure的中文意思就是測量。所以它的作用就是測量View的大小。
而決定View的大小隻需要兩個值:寬測量值(widthMeasureSpec)和高測量值(heightMeasureSpec)。
對於詳細測量值(measureSpec)需要兩樣東西來確定它,那就是大小(size)和模式(mode)。而measureSpec,size,mode他們三個的關係,都封裝在View類中的一個內部類裏,名叫MeasureSpec。

1.UNSPECIFIED 
 * 父不沒有對子施加任何約束,子可以是任意大小(也就是未指定) 
 * (UNSPECIFIED在源碼中的處理和EXACTLY一樣。當View的寬高值設置爲0的時候或者沒有設置寬高時,模式爲UNSPECIFIED 
 * 2.EXACTLY 
 * 父決定子的確切大小,子被限定在給定的邊界裏,忽略本身想要的大小。 
 * (當設置width或height爲match_parent時,模式爲EXACTLY,因爲子view會佔據剩餘容器的空間,所以它大小是確定的) 
 * 3.AT_MOST 
 * 子最大可以達到的指定大小 
 * (當設置爲wrap_content時,模式爲AT_MOST, 表示子view的大小最多是多少,這樣子view會根據這個上限來設置自己的尺寸)
最高兩位是00的時候表示"未指定模式"。即MeasureSpec.UNSPECIFIED
最高兩位是01的時候表示"'精確模式"。即MeasureSpec.EXACTLY
最高兩位是11的時候表示"最大模式"。即MeasureSpec.AT_MOST
很多人一遇到位操作頭就大了,爲了操作簡便,於是系統給我提供了一個MeasureSpec工具類。
這個工具類有四個方法和三個常量(上面所示)供我們使用:
 
//這個是由我們給出的尺寸大小和模式生成一個包含這兩個信息的int變量,這裏這個模式這個參數,傳三個常量中的一個。
public static int makeMeasureSpec(int size, int mode)
 
//這個是得到這個變量中表示的模式信息,將得到的值與三個常量進行比較。
public static int getMode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章