Android 繪圖學(xué)習(xí)
Paint 講解開篇
android Paint淹真,Canvas
android中繪制特定圖案類似顯示中的繪畫需要畫筆和畫紙,為此android提供了Paint和Canvas。
Paint和Canvas分別代表畫筆和畫布唉铜。
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
Paint類似畫筆违帆,保存著繪制文本,圖形雇逞,圖片的樣式和顏色信息。(顏色茁裙,寬度塘砸,粗細(xì),透明度晤锥,字體樣式掉蔬,字體大欣认堋)。
The Canvas class holds the "draw" calls. To draw something, you need
4 basic components: A Bitmap to hold the pixels, a Canvas to host
the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect,
Path, text, Bitmap), and a paint (to describe the colors and styles for the
drawing).
Canvas類似畫布女轿,用于繪制箭启。
提供了三種初始化方法:
Paint(),
Paint(int flags),
Paint(Paint paint)。
第二種構(gòu)造函數(shù)傳入了flag蛉迹,相當(dāng)于無參構(gòu)造之后調(diào)用了setFlags(int)傅寡,有很多種flag,這里舉個(gè)例子UNDERLINE_TEXT_FLAG(其他的flag見developers文檔)北救,繪制文字時(shí)會(huì)有下劃線荐操,多個(gè)flag或可以達(dá)到設(shè)置多個(gè)flag的目的。
Ps:設(shè)置的很多屬性都可以通過flag實(shí)現(xiàn)珍策,但沒有set函數(shù)形象托启。(例如ANTI_ALIAS_FLAG抗鋸齒,一般初始化時(shí)直接把抗鋸齒的flag填入)
Paint常用設(shè)置
Paint常用的設(shè)置函數(shù):
setAlpha()透明度
setAntiAlias()抗鋸齒
setColor(),setARGB()設(shè)置顏色
setStyle(Paint.Style style) 設(shè)置填充樣式
setStrokeCap(Paint.Cap cap) 畫筆的樣式(落筆攘宙,收筆時(shí))
setStrokeJoin(Paint.Join join)連接點(diǎn)的樣式
setStrokeWidth(float width)設(shè)置畫筆寬度
setShadowLayer(float radius, float dx, float dy, int shadowColor) 設(shè)置陰影
setTextSize(float textSize) 字體大小
setTextAlign(Paint.Align.RIGHT)設(shè)置字體對(duì)齊方式
后期講解:
setColorFilter(ColorFilter filter) 設(shè)置顏色過濾
setUnderlineText(true) 下劃線
setPathEffect() 設(shè)置路徑效果
setTypeface() 設(shè)置字體風(fēng)格
setFilterBitmap() 設(shè)置圖片過濾
setXfermode(Xfermode xfermode) xfermode設(shè)置圖像混合模式
setShader(Shader shader) 設(shè)置shader包括漸變shader屯耸,圖片shader
。蹭劈。疗绣。。链方。持痰。。祟蚀。
基本屬性使用
setAlpha 透明度
setAlpha(int a) 設(shè)置透明度,a 值得范圍 [0..255]工窍,僅僅改變setColor()的顏色的透明度,不改變顏色值前酿,0是完全透明患雏,255完全不透明。
注意:需要先調(diào)用setColor()罢维,再調(diào)用setAlpha才會(huì)生效淹仑,否則將會(huì)被覆蓋,因?yàn)閟etColor中包含了alpha肺孵。
setStyle 填充樣式
setStyle設(shè)置填充樣式匀借,所謂填充的樣式指只繪制線或者繪制同時(shí)填充:
Paint.Style.FILL 填充內(nèi)部,會(huì)把閉合區(qū)域填充顏色
Paint.Style.FILL_AND_STROKE 填充內(nèi)部和描邊
Paint.Style.STROKE 僅描邊平窘,僅僅繪制邊界
默認(rèn)FILL 填充內(nèi)部吓肋,
STROKE樣式
FILL_AND_STROKE樣式和FILL 類似但當(dāng)畫筆寬度很寬時(shí)會(huì)產(chǎn)生不同
顏色,字體瑰艘,對(duì)齊是鬼,抗鋸齒
setColor肤舞,setARGB設(shè)置顏色,設(shè)置畫筆的顏色均蜜,setARGB()參數(shù)范圍0-255李剖。
setAntiAlias(boolean) 抗鋸齒,使邊界更順滑(有些屏幕分辨率不高囤耳,導(dǎo)致像素點(diǎn)比較大篙顺,繪制邊界可能會(huì)有顆粒感,打開抗鋸齒邊界顆粒感會(huì)減少)紫皇。
setTextSize(float textSize) 字體大小慰安,單位是px腋寨,如果是dp要注意轉(zhuǎn)換聪铺。
setTextAlign(Paint.Align.RIGHT)設(shè)置字體對(duì)齊方式,根據(jù)下面的實(shí)例可以萄窜,對(duì)齊方式基于開始繪制的點(diǎn)铃剔。
一起講解:
mPaint.setTextSize(50);
mPaint.setTextAlign(Paint.Align.LEFT);
canvas.drawText("android Paint 學(xué)習(xí) LEFT",300,300,mPaint);
mPaint.setTextAlign(Paint.Align.CENTER);
canvas.drawText("android Paint 學(xué)習(xí) CENTER",300,400,mPaint);
mPaint.setTextAlign(Paint.Align.RIGHT);
canvas.drawText("android Paint 學(xué)習(xí) RIGHT",300,500,mPaint);
setTextAlign對(duì)齊是相對(duì)于開始繪制的坐標(biāo)點(diǎn)。
setShadowLayer 陰影
setShadowLayer(float radius, float dx, float dy, int shadowColor) 設(shè)置陰影
mPaint.setShadowLayer(10,-20,30,Color.GRAY);
canvas.drawText("android Paint 學(xué)習(xí) CENTER",getWidth()/2,450,mPaint);
setShadowLayer(float radius, float dx, float dy, int shadowColor)
Radius設(shè)置角度查刻,dx键兜,dy控制字體的上下左右出現(xiàn),有正負(fù)之分穗泵,dx的正負(fù)代表右左普气,dy的正負(fù)代表下上。
setStrokeCap
setStrokeCap(Paint.Cap.ROUND)
設(shè)置繪制起始點(diǎn)和結(jié)尾點(diǎn)的樣式佃延,
三種樣式ROUND,BUTT,SQUARE
Cap.ROUND(圓形)现诀、Cap.SQUARE(方形)、Paint.Cap.BUTT(無)
ROUND:
BUTT和SQUARE差別不大:
setStrokeJoin
setStrokeJoin(Paint.Join join)履肃,設(shè)置繪制path連接點(diǎn)的樣式
mPaint.setStrokeJoin(Paint.Join.ROUND);
// mPaint.setStrokeJoin(Paint.Join.MITER);
// mPaint.setStrokeJoin(Paint.Join.BEVEL);
Join.MITER(結(jié)合處為銳角)仔沿、
Join.Round(結(jié)合處為圓弧)、
Join.BEVEL(結(jié)合處為直線)
ROUND樣式:
MITER樣式:
BEVEL樣式:
其他暫不講解
setXfermode(Xfermode xfermode) xfermode設(shè)置圖像混合模式
setShader(Shader shader) 設(shè)置shader包括漸變shader尺棋,圖片shader
還有很多其他屬性會(huì)后續(xù)講解封锉。
android繪圖之Paint(1)
android繪圖之Canvas基礎(chǔ)(2)
Android繪圖之Path(3)
Android繪圖之drawText繪制文本相關(guān)(4)
Android繪圖之Canvas概念理解(5)
Android繪圖之Canvas變換(6)
Android繪圖之Canvas狀態(tài)保存和恢復(fù)(7)
Android繪圖之PathEffect (8)
Android繪圖之LinearGradient線性漸變(9)
Android繪圖之SweepGradient(10)
Android繪圖之RadialGradient 放射漸變(11)
Android繪制之BitmapShader(12)
Android繪圖之ComposeShader,PorterDuff.mode及Xfermode(13)
Android繪圖之drawText,getTextBounds,measureText,FontMetrics,基線(14)
Android繪圖之貝塞爾曲線簡(jiǎn)介(15)
Android繪圖之PathMeasure(16)
Android 動(dòng)態(tài)修改漸變 GradientDrawable