自定義view(二) onDraw 之 Paint

2021-07-30 11:52:13 字數 1545 閱讀 1391

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 背景 我們不是牛逼的程式設計師,我們只是程式開發中的墊腳石。我們不傳送紅包,...