Android原生繪圖工具Paint詳細(xì)
前言:
生活中繪制圖案需要紙和筆,android
中提供了類(lèi)似的工具Canvas
和Paint
,分別對(duì)應(yīng)畫(huà)布和畫(huà)筆。
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
Paint
擁有繪制幾何圖形、文本、圖片的樣式和顏色信息。
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
擁有繪圖的請(qǐng)求權(quán),想要完成繪制,需要4個(gè)基本元素:保存像素的Bitmap
、一個(gè)可以調(diào)用draw
方法的canvas
、要繪制的內(nèi)容描述、一個(gè)畫(huà)筆。憑借這4個(gè)元素就可以繪制到一個(gè)bitmap
上,然后渲染到屏幕上。
1.簡(jiǎn)介
今天先將一下Paint的相關(guān)內(nèi)容。Paint提供了三種初始化方法:
Paint() Paint(int flag) Paint(Paint paint)
2.基本屬性使用
2.1 setAlpha透明度
setAlpha(int a) 設(shè)置范圍0~255
2.2 setStyle填充樣式
填充樣式表示繪線和填充的選擇:
Paint.Style.FILL Paint.Style.FILL_AND_STROKE Paint.Style.STROKE
2.3 顏色,字體,對(duì)齊,抗鋸齒
setColor
,setARGB
設(shè)置顏色,設(shè)置畫(huà)筆的顏色,
setARGB()
參數(shù)范圍0-255。
setAntiAlias(boolean)
抗鋸齒,使邊界更順滑(有些屏幕分辨率不高,導(dǎo)致像素點(diǎn)比較大,繪制邊界可能會(huì)有顆粒感,打開(kāi)抗鋸齒邊界顆粒感會(huì)減少)。
setTextSize(float textSize)
字體大小,單位是px,如果是dp要注意轉(zhuǎn)換。
setTextAlign(Paint.Align.RIGHT)
設(shè)置字體對(duì)齊方式,根據(jù)下面的實(shí)例可以,對(duì)齊方式基于開(kāi)始繪制的點(diǎn)。
mTextPaint.setTextAlign(Paint.Align.LEFT); canvas.drawText("MatumbaMan的博客",200, 200, mTextPaint); mTextPaint.setTextAlign(Paint.Align.RIGHT); canvas.drawText("MatumbaMan的博客",200, 300, mTextPaint); mTextPaint.setTextAlign(Paint.Align.CENTER); canvas.drawText("MatumbaMan的博客",200, 400, mTextPaint);
2.4 setShadowLayer 陰影
setShadowLayer(float radius, float dx, float dy, int shadowColor) 設(shè)置陰影
Radius
設(shè)置角度,dx,dy控制字體的上下左右出現(xiàn),有正負(fù)之分,dx的正負(fù)代表右左,dy的正負(fù)代表下上。
mTextPaint.setTextAlign(Paint.Align.LEFT); mTextPaint.setShadowLayer(10, -20, 40, Color.GRAY); canvas.drawText("MatumbaMan的博客",200, 200, mTextPaint); mTextPaint.setTextAlign(Paint.Align.RIGHT); canvas.drawText("MatumbaMan的博客",200, 300, mTextPaint); mTextPaint.setTextAlign(Paint.Align.CENTER); canvas.drawText("MatumbaMan的博客",200, 400, mTextPaint);
2.5 setStrokeCap
setStrokeCap(Paint.Cap.ROUND)設(shè)置繪制起始點(diǎn)和結(jié)尾點(diǎn)的樣式,
三種樣式ROUND
,BUTT
,SQUARE
、
Cap.ROUND(圓形)
Cap.SQUARE(方形)
Paint.Cap.BUTT(無(wú))
Path path = new Path(); path.moveTo(100, 100); path.lineTo(100, 200); path.lineTo(200, 300); canvas.drawPath(path, mPaint2);//無(wú) path.reset(); path.moveTo(300, 100); path.lineTo(300, 200); path.lineTo(400, 300); mPaint2.setStrokeCap(Paint.Cap.ROUND);//圓 canvas.drawPath(path, mPaint2); path.reset(); path.moveTo(500, 100); path.lineTo(500, 200); path.lineTo(600, 300); mPaint2.setStrokeCap(Paint.Cap.SQUARE);//方 canvas.drawPath(path, mPaint2);
2.6 setStrokeJoin
setStrokeJoin(Paint.Join join),設(shè)置繪制path連接點(diǎn)的樣式
Join.MITER(結(jié)合處為銳角)
Join.Round(結(jié)合處為圓弧)
Join.BEVEL(結(jié)合處為直線)
Path path = new Path(); path.moveTo(100, 100); path.lineTo(100, 200); path.lineTo(200, 300); mPaint2.setStrokeJoin(Paint.Join.MITER); canvas.drawPath(path, mPaint2); path.reset(); path.moveTo(300, 100); path.lineTo(300, 200); path.lineTo(400, 300); mPaint2.setStrokeJoin(Paint.Join.ROUND); canvas.drawPath(path, mPaint2); path.reset(); path.moveTo(500, 100); path.lineTo(500, 200); path.lineTo(600, 300); mPaint2.setStrokeJoin(Paint.Join.BEVEL); canvas.drawPath(path, mPaint2);
到此這篇關(guān)于Androi
原生繪圖工具Paint
的文章就介紹到這了,更多相關(guān)Android
原生繪圖Paint
內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android自定義View-Paint詳解
- Android利用Paint自定義View實(shí)現(xiàn)進(jìn)度條控件方法示例
- Android繪圖之Paint的使用方法詳解
- Android畫(huà)圖之抗鋸齒paint和Canvas兩種方式實(shí)例
- Android自定義View中Paint、Rect、Canvas介紹(一)
- Android中Paint類(lèi)和Canvas類(lèi)的方法匯總
- Android中區(qū)別Drawable Bitmap Canvas Paint
- Android開(kāi)發(fā)之圖形圖像與動(dòng)畫(huà)(一)Paint和Canvas類(lèi)學(xué)習(xí)
相關(guān)文章
Android下拉刷新PtrFrameLayout的使用實(shí)例代碼
本篇文章主要介紹了Android下拉刷新PtrFrameLayout的使用實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06解決android studio android monitor打不開(kāi)的問(wèn)題
下面小編就為大家分享一篇解決android studio android monitor打不開(kāi)的問(wèn)題,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android?ViewStub使用方法學(xué)習(xí)
這篇文章主要為大家介紹了Android?ViewStub使用方法學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11android實(shí)現(xiàn)簡(jiǎn)單儀表盤(pán)效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡(jiǎn)單儀表盤(pán)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05詳解Flutter?響應(yīng)式狀態(tài)管理框架GetX
這篇文章主要為大家介紹了Flutter?響應(yīng)式狀態(tài)管理框架GetX詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android實(shí)現(xiàn)瘋狂連連看游戲之開(kāi)發(fā)游戲界面(二)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之開(kāi)發(fā)游戲界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03android串口開(kāi)發(fā)入門(mén)之搭建ndk開(kāi)發(fā)環(huán)境及第一個(gè)jni調(diào)用程序
這篇文章主要給大家介紹了關(guān)于android串口開(kāi)發(fā)入門(mén)之搭建ndk開(kāi)發(fā)環(huán)境及第一個(gè)jni調(diào)用程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Android使用ViewPager實(shí)現(xiàn)類(lèi)似laucher左右拖動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)類(lèi)似laucher左右拖動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android GestureDetector實(shí)現(xiàn)手勢(shì)滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android GestureDetector實(shí)現(xiàn)手勢(shì)滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05