請尊重原創(chuàng),轉(zhuǎn)載請注明出處【tianyl】的博客
關(guān)于的Android之玩轉(zhuǎn)View目錄
1 前言
說到Android中的Paint嚎朽,我們的第一印象就是畫筆调榄,當(dāng)然了趟咆,Paint主要的作用的確是作畫,不過這里的作畫并非我們常識中的作畫渺蒿,因為它除了繪制圖像痢士,還可以繪制文字
接下來就說說Paint這個類在繪制中的一些妙用
2 圖形繪制
2.1 畫筆樣式api
- 設(shè)置畫筆樣式
Paint.Style.FILL :填充內(nèi)部
Paint.Style.FILL_AND_STROKE :填充內(nèi)部和描邊
Paint.Style.STROKE :僅描邊
- 畫筆寬度
setStrokeWidth
- 畫筆是否抗鋸齒
setAntiAlias(boolean aa)
會消耗較大資源,繪制圖形速度會變慢茂装,一般會開啟怠蹂。設(shè)置后會平滑一些;
- 線冒樣式
setStrokeCap(Paint.Cap cap)
取值有
Cap.ROUND(圓形線帽)
Cap.SQUARE(方形線帽)
Paint.Cap.BUTT(無線帽)
多出來的區(qū)域就是線帽少态,就相當(dāng)于給原來的直線加上一個帽子一樣城侧,所以叫線帽。所以加了線帽的比原始長度長
- 線段連接處樣式
setStrokeJoin(Paint.Join join)
取值有:
Join.MITER(結(jié)合處為銳角)
Join.Round(結(jié)合處為圓弧)
Join.BEVEL(結(jié)合處為直線)
- 筆畫的傾斜度
setStrokeMiter
設(shè)置筆畫筆尖的傾斜度(據(jù)說這個的功能用setStrokeJoin也基本可以實現(xiàn)彼妻,本人也由于使用較少嫌佑,略過)
- 筆畫復(fù)位
reset()
- 設(shè)置alpha值和顏色
setARGB(int a, int r, int g, int b)
getAlpha()
setAlpha(int a)
getColor()
setColor(int color)
- 圖像抖動處理
setDither(boolean dither)
設(shè)定是否使用圖像抖動處理,會使繪制出來的圖片顏色更加平滑和飽滿侨歉、圖像更加清晰
- 路徑效果
setPathEffect(PathEffect effect)
這個方法的參數(shù)都是PathEffect的子類屋摇,包含ComposePathEffect, CornerPathEffect, DashPathEffect, DiscretePathEffect, PathDashPathEffect, SumPathEffect,例如
CornerPathEffect就是圓形拐角效果为肮,DashPathEffect就是虛線效果摊册,這個方法的參數(shù)較多,用到時可以具體研究
- 重疊方式(重要)
setXfermode(Xfermode xfermode)
設(shè)置圖形重疊時的處理方式颊艳,如合并茅特,取交集或并集。這個用途非常廣泛棋枕,后續(xù)仔細(xì)說明
- 濾鏡效果
setMaskFilter(MaskFilter maskfilter)
- 顏色過濾
setColorFilter(ColorFilter colorfilter)
設(shè)置顏色過濾器白修,可以在繪制顏色時實現(xiàn)不用顏色的變換效果
- 漸變效果
setShader(Shader shader)
通過繼承Shader的子類,可以實現(xiàn)各種漸變
- 陰影效果
setShadowLayer(float radius ,float dx,float dy,int color)
在圖形下面設(shè)置陰影層重斑,產(chǎn)生陰影效果兵睛,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離窥浪,color為陰影的顏色
3 文字繪制
3.1 字體樣式api
- 行間距
float getFontSpacing()
獲取字符行間距
- 字符間距
float getLetterSpacing()
void setLetterSpacing(float letterSpacing)
設(shè)置和獲取字符間距
- 下劃線
final boolean isUnderlineText()
void setUnderlineText(boolean underlineText)
設(shè)置和獲取是否有下劃線
- 文字大小
float getTextSize()
void setTextSize(float textSize)
獲取與設(shè)置文字大小祖很,注意:Paint.setTextSize傳入的單位是px,TextView.setTextSize傳入的單位是sp
- 字體類型
Typeface getTypeface()
Typeface setTypeface(Typeface typeface)
獲取與設(shè)置字體類型漾脂。Android默認(rèn)有四種字體樣式:BOLD(加粗)假颇、BOLD_ITALIC(加粗并傾斜)、ITALIC(傾斜)骨稿、NORMAL(正常)笨鸡,我們也可以通過Typeface類來自定義個性化字體
- 文字傾斜
float getTextSkewX()
void setTextSkewX(float skewX)
獲取與設(shè)置文字傾斜姜钳,參數(shù)沒有具體范圍,官方推薦值為-0.25形耗,值為負(fù)則右傾哥桥,為正則左傾,默認(rèn)值為0
- 對齊方式
Paint.Align getTextAlign()
void setTextAlign(Paint.Align align)
獲取與設(shè)置文本對齊方式激涤,取值為CENTER拟糕、LEFT、RIGHT昔期,也就是文字繪制是左邊對齊已卸、右邊還是局中的
- 亞像素
setSubpixelText(boolean subpixelText)
使用亞像素,關(guān)于亞像素的概念可以參考百度硼一,簡單來說就是設(shè)置了可以顯示效果更好累澡,但是會耗費一定的計算機性能
- 翻頁效果
int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth)
比如文本閱讀器的翻頁效果,我們需要在翻頁的時候動態(tài)折斷或生成一行字符串般贼,這就派上用場了
- 字符個數(shù)計算
void getTextBounds(char[] text, int index, int count, Rect bounds)
void getTextBounds(String text, int start, int end, Rect bounds)
獲取文本的寬高愧哟,通過bounds的Rect拿到整型
float measureText(String text)
float measureText(CharSequence text, int start, int end)
float measureText(String text, int start, int end)
float measureText(char[] text, int index, int count)
粗略獲取文本的寬度,和上面的getTextBounds比較類似哼蛆,返回浮點數(shù)
int getTextWidths(String text, int start, int end, float[] widths)
int getTextWidths(String text, float[] widths)
int getTextWidths(CharSequence text, int start, int end, float[] widths)
int getTextWidths(char[] text, int index, int count, float[] widths)
精確計算文字寬度蕊梧,與上面兩個類似
4 總結(jié)
上述就是關(guān)于Paint繪制圖像和文字時的一些基礎(chǔ)api了,當(dāng)然腮介,實際用起來遠(yuǎn)沒有這么簡單肥矢,下一篇就通個幾個例子,來詳細(xì)講解一下Paint繪制圖像實現(xiàn)的一些特性和繪制文字時的注意點
注:圖片來源于網(wǎng)絡(luò)(侵刪)