繪畫是自定義View的基礎,Paint和canvas至關於繪畫中的畫筆和紙,掌握Paint和canvas可使咱們更加容易進行自定義View。canvas
1、setAntiAlias()
通常用於繪製不規則圖形的時候,使用抗鋸齒,好比圓形、文字等。對於規則的圖形,是不須要打開抗鋸齒功能的,好比矩形。 bash
2、setStyle()
設置填充的樣式,主要用於控制幾何圖形
函數
3、setStrokeWidth()
設置畫筆的寬度,單位是px.對畫筆的STYLE設置成STROKE和FILL_AND_STROKE時有效。但畫支線時不管style設置什麼值,均有效。
工具
4、Paint.Cap
Cap指定了描邊線和路徑的開始和結束的處理。默認爲BUTT。
字體
5、Paint.Join
Join指定線條和曲線段在描邊路徑上鍊接的處理。默認爲MITER。
ui
1、畫背景
canvas提供3種方法能夠用於繪製畫布的背景
spa
void drawColor(int color)
void drawARGB(int a,int r,int g,int b)
void drawRGB(int r,int g,int b)
複製代碼
2、畫直線
3d
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
複製代碼
3、畫矩形
矩形的範圍可使用兩個矩形工具類進行設置:Rect 和 RectF,二者的主要區別就是Rect存儲的上下左右均爲Int類型,而RectF存儲的上下左右均爲Float類型。 rest
4、畫弧
code
注意事項:
canvas畫弧時,0度的起始位置在x軸正方向上。
5、畫文字
前面幾個參數都很好理解,無非就是文本、索引值和繪畫起始的x軸位置,但基線是什麼,怎麼求呢? Baseline是文字繪製時所參照的基準線,觀察下圖可看見基線是大部分英文字母的底部沿線。只有肯定Baseline的位置,才能將文字準確的繪製在咱們想要的位置上。
須要先理清楚一些概念: 7、save()和restore()
每次調用save(),都會先保存當前畫布的狀態,而後將其放入到特定的棧中。
每次調用restore(),都會把棧頂的畫布取出來,並按照這個狀態恢復當前的畫布,而後在這個畫布上做畫。
clipXX系列的函數對畫布的操做是不可逆的,除非調用了save()和restore()對畫布進行保存和恢復。
path表明路徑,在canvas中使用drawPath(Path,Paint)進行繪畫路徑。
1、畫直線路徑void moveTo(float x1,float y1)
void lineTo(float x2,float y2)
void close()
複製代碼
(x1,y1)是直線的起始點,(x2,y2)是直線的終點,又是下一個繪製直線路徑的起始點,lineTo能夠無限用。
調用了moveTo()後,調用lineTo()畫了N條直線,尚未造成閉環的話,能夠調用close()將路徑的首尾鏈接起來。
2、畫弧形路徑
3、addXXX系列函數
路徑默認是連貫的,但addXXX()系列函數能夠直接添加一些固定形狀的路徑,沒必要考慮連貫性。
一、添加矩形路徑
目前順時針和逆時針的生成對矩形圖形並沒有影響,但對於根據路徑方向繪畫文字等,則會起到關鍵做用。
二、添加圓角矩形路徑
三、添加圓形路徑
四、添加橢圓路徑
五、添加圓弧路徑
具體參數和canvas繪製圓弧同樣
1、測量文本寬高
一、經過Paint.measureText測量文本寬度
二、經過Paint.getTextBounds得到文字所在的矩形區域,能夠的到寬高
三、經過Paint.FontMetrics or Paint.FontMetricsInt得到文本寬度
demo連接: 連接:pan.baidu.com/s/1GrP1XYFg… 提取碼:wubw