onmeasure(int widthmeasurespec, int heightmeasurespec)
onlayout(boolean changed, int
left, int top, int
right, int bottom)
ondraw(canvas canvas)
onmeasure是用來測量view的大小的,跟xml布局相關
onlayout是用來計算view的大小的,決定view在viewgroup中的位置
ondraw是用來繪製view的
為什麼不按照順序講onlayout方法呢?
其實對於自定義view來言,onlayout方法基本上不用重寫,但是對於自定義viewgroup而言,此方法確實相當的重要,因為他要計算出viewgroup中所有的子view。今天只講自定義view,對於viewgroup以後會將。
言歸正傳(一起暴躁起來),ondraw(canvas canvas)方法本身沒有什麼難點,但是它的內部通常會涉及到幾個重要的類:paint(畫筆),canvas(畫板)。
讓我們來一一介紹:
(一)paint:paint api文件
作為一名暴躁的碼字猴,看到這麼乙個類似於工具的類,動動腳趾頭想一下,它肯定有很多的屬性,而屬性的賦值使用的方法一般都是set***( ), 那我們就去暴躁的翻閱一下那些set方法。
看下api,不算多,也就一二十個set方法吧
來來來,下面看:
shader setshader(shader shader)
設定著色器,設定畫筆的填充效果(bitmapshader, composeshader, lineargradient, radialgradient, sweepgradient)
mpaintrect = new paint();
mpaintrect.setantialias(true);//設定抗鋸齒
mpaintrect.setstyle(paint.style
.stroke);//設定格式為描邊
mpaintrect.setcolor(color.black);//設定顏色
mpaintrect.setstrokewidth(10);//設定描邊寬度
很簡單,畫筆先給new出來,然後就是設定屬性。1歲小孩都會弄。
但是要注意一點,最好不要在ondraw方法中new paint();
因為ondraw方法有可能會多次呼叫,(官方給出了invalidate();和postinvalidate();裡面呼叫了ondraw方法。)多次的new 物件,容易影響記憶體的消耗
ok,知道怎麼用畫筆了。接下來,就剩下canvas畫板。
詳解paint的set方法
自定義view 二
自定義view的最重要的乙個部分是自定義它的外觀。根據你的程式的需求,通過ondraw方法實現繪製。在ondraw中,會傳遞給你乙個canvas。canvas封裝了繪製圖形的方法。還需要自定義乙個 paint去定義顏色樣式的填充 簡單來說 canvas定義你在螢幕上畫的圖形,而paint定義顏色,樣...
自定義view之自定義屬性
1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...
自定義樣式View 二 自定義Button
android中自帶的 button 樣式比較醜,為了美化 button 可使用一下方法。實現效果如下 自定義 button 實現效果 1.自定義button 背景選擇器 2.自定義buton 素材 3.自定義button 背景 我們不是牛逼的程式設計師,我們只是程式開發中的墊腳石。我們不傳送紅包,...