Android之玩轉(zhuǎn)View(一):Paint的基礎(chǔ)api

請尊重原創(chuàng),轉(zhuǎn)載請注明出處【tianyl】的博客

關(guān)于的Android之玩轉(zhuǎn)View目錄

1 前言

說到Android中的Paint嚎朽,我們的第一印象就是畫筆调榄,當(dāng)然了趟咆,Paint主要的作用的確是作畫,不過這里的作畫并非我們常識中的作畫渺蒿,因為它除了繪制圖像痢士,還可以繪制文字

接下來就說說Paint這個類在繪制中的一些妙用

2 圖形繪制

2.1 畫筆樣式api

  1. 設(shè)置畫筆樣式
Paint.Style.FILL :填充內(nèi)部
Paint.Style.FILL_AND_STROKE :填充內(nèi)部和描邊
Paint.Style.STROKE :僅描邊
  1. 畫筆寬度
setStrokeWidth
  1. 畫筆是否抗鋸齒
setAntiAlias(boolean aa)

會消耗較大資源,繪制圖形速度會變慢茂装,一般會開啟怠蹂。設(shè)置后會平滑一些;

  1. 線冒樣式
setStrokeCap(Paint.Cap cap)
取值有
Cap.ROUND(圓形線帽)
Cap.SQUARE(方形線帽)
Paint.Cap.BUTT(無線帽) 

多出來的區(qū)域就是線帽少态,就相當(dāng)于給原來的直線加上一個帽子一樣城侧,所以叫線帽。所以加了線帽的比原始長度長

  1. 線段連接處樣式
setStrokeJoin(Paint.Join join)
取值有:
Join.MITER(結(jié)合處為銳角)
Join.Round(結(jié)合處為圓弧)
Join.BEVEL(結(jié)合處為直線) 
  1. 筆畫的傾斜度
setStrokeMiter

設(shè)置筆畫筆尖的傾斜度(據(jù)說這個的功能用setStrokeJoin也基本可以實現(xiàn)彼妻,本人也由于使用較少嫌佑,略過)

  1. 筆畫復(fù)位
reset()
  1. 設(shè)置alpha值和顏色
setARGB(int a, int r, int g, int b) 
getAlpha() 
setAlpha(int a) 
getColor() 
setColor(int color) 
  1. 圖像抖動處理
setDither(boolean dither)

設(shè)定是否使用圖像抖動處理,會使繪制出來的圖片顏色更加平滑和飽滿侨歉、圖像更加清晰

  1. 路徑效果
setPathEffect(PathEffect effect)

這個方法的參數(shù)都是PathEffect的子類屋摇,包含ComposePathEffect, CornerPathEffect, DashPathEffect, DiscretePathEffect, PathDashPathEffect, SumPathEffect,例如
CornerPathEffect就是圓形拐角效果为肮,DashPathEffect就是虛線效果摊册,這個方法的參數(shù)較多,用到時可以具體研究

  1. 重疊方式(重要)
setXfermode(Xfermode xfermode)

設(shè)置圖形重疊時的處理方式颊艳,如合并茅特,取交集或并集。這個用途非常廣泛棋枕,后續(xù)仔細(xì)說明

  1. 濾鏡效果
setMaskFilter(MaskFilter maskfilter)
  1. 顏色過濾
setColorFilter(ColorFilter colorfilter)

設(shè)置顏色過濾器白修,可以在繪制顏色時實現(xiàn)不用顏色的變換效果

  1. 漸變效果
setShader(Shader shader)

通過繼承Shader的子類,可以實現(xiàn)各種漸變

  1. 陰影效果
setShadowLayer(float radius ,float dx,float dy,int color)

在圖形下面設(shè)置陰影層重斑,產(chǎn)生陰影效果兵睛,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離窥浪,color為陰影的顏色

3 文字繪制

3.1 字體樣式api

  1. 行間距
float getFontSpacing() 

獲取字符行間距

  1. 字符間距
float getLetterSpacing() 
void setLetterSpacing(float letterSpacing) 

設(shè)置和獲取字符間距

  1. 下劃線
final boolean isUnderlineText() 
void setUnderlineText(boolean underlineText) 

設(shè)置和獲取是否有下劃線

  1. 文字大小
float getTextSize() 
void setTextSize(float textSize) 

獲取與設(shè)置文字大小祖很,注意:Paint.setTextSize傳入的單位是px,TextView.setTextSize傳入的單位是sp

  1. 字體類型
Typeface getTypeface() 
Typeface setTypeface(Typeface typeface) 

獲取與設(shè)置字體類型漾脂。Android默認(rèn)有四種字體樣式:BOLD(加粗)假颇、BOLD_ITALIC(加粗并傾斜)、ITALIC(傾斜)骨稿、NORMAL(正常)笨鸡,我們也可以通過Typeface類來自定義個性化字體

  1. 文字傾斜
float getTextSkewX() 
void setTextSkewX(float skewX) 

獲取與設(shè)置文字傾斜姜钳,參數(shù)沒有具體范圍,官方推薦值為-0.25形耗,值為負(fù)則右傾哥桥,為正則左傾,默認(rèn)值為0

  1. 對齊方式
Paint.Align getTextAlign() 
void setTextAlign(Paint.Align align) 

獲取與設(shè)置文本對齊方式激涤,取值為CENTER拟糕、LEFT、RIGHT昔期,也就是文字繪制是左邊對齊已卸、右邊還是局中的

  1. 亞像素
setSubpixelText(boolean subpixelText)

使用亞像素,關(guān)于亞像素的概念可以參考百度硼一,簡單來說就是設(shè)置了可以顯示效果更好累澡,但是會耗費一定的計算機性能

  1. 翻頁效果
int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth)

比如文本閱讀器的翻頁效果,我們需要在翻頁的時候動態(tài)折斷或生成一行字符串般贼,這就派上用場了

  1. 字符個數(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ò)(侵刪)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叠洗,一起剝皮案震驚了整個濱河市甘改,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灭抑,老刑警劉巖十艾,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腾节,居然都是意外死亡忘嫉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門案腺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庆冕,“玉大人,你說我怎么就攤上這事劈榨±⒈” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵鞋既,是天一觀的道長力九。 經(jīng)常有香客問我,道長邑闺,這世上最難降的妖魔是什么跌前? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮陡舅,結(jié)果婚禮上抵乓,老公的妹妹穿的比我還像新娘。我一直安慰自己靶衍,他們只是感情好灾炭,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颅眶,像睡著了一般蜈出。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涛酗,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天铡原,我揣著相機與錄音,去河邊找鬼商叹。 笑死燕刻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剖笙。 我是一名探鬼主播卵洗,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弥咪!你這毒婦竟也來了过蹂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤酪夷,失蹤者是張志新(化名)和其女友劉穎榴啸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晚岭,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡鸥印,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坦报。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片库说。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖片择,靈堂內(nèi)的尸體忽然破棺而出潜的,到底是詐尸還是另有隱情,我是刑警寧澤字管,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布啰挪,位于F島的核電站信不,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亡呵。R本人自食惡果不足惜抽活,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锰什。 院中可真熱鬧下硕,春花似錦、人聲如沸汁胆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫩码。三九已至誉尖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谢谦,已是汗流浹背释牺。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留回挽,地道東北人没咙。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像千劈,于是被迫代替她去往敵國和親祭刚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361