Android原生繪圖工具Paint詳細(xì)
前言:
生活中繪制圖案需要紙和筆,android
中提供了類似的工具Canvas
和Paint
,分別對應(yīng)畫布和畫筆。
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
擁有繪圖的請求權(quán),想要完成繪制,需要4個(gè)基本元素:保存像素的Bitmap
、一個(gè)可以調(diào)用draw
方法的canvas
、要繪制的內(nèi)容描述、一個(gè)畫筆。憑借這4個(gè)元素就可以繪制到一個(gè)bitmap
上,然后渲染到屏幕上。
1.簡介
今天先將一下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 顏色,字體,對齊,抗鋸齒
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è)置字體對齊方式,根據(jù)下面的實(shí)例可以,對齊方式基于開始繪制的點(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(無)
Path path = new Path(); path.moveTo(100, 100); path.lineTo(100, 200); path.lineTo(200, 300); canvas.drawPath(path, mPaint2);//無 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android下拉刷新PtrFrameLayout的使用實(shí)例代碼
本篇文章主要介紹了Android下拉刷新PtrFrameLayout的使用實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06解決android studio android monitor打不開的問題
下面小編就為大家分享一篇解決android studio android monitor打不開的問題,具有很的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android?ViewStub使用方法學(xué)習(xí)
這篇文章主要為大家介紹了Android?ViewStub使用方法學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11詳解Flutter?響應(yīng)式狀態(tài)管理框架GetX
這篇文章主要為大家介紹了Flutter?響應(yīng)式狀態(tài)管理框架GetX詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android實(shí)現(xiàn)瘋狂連連看游戲之開發(fā)游戲界面(二)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之開發(fā)游戲界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03android串口開發(fā)入門之搭建ndk開發(fā)環(huán)境及第一個(gè)jni調(diào)用程序
這篇文章主要給大家介紹了關(guān)于android串口開發(fā)入門之搭建ndk開發(fā)環(huán)境及第一個(gè)jni調(diào)用程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Android使用ViewPager實(shí)現(xiàn)類似laucher左右拖動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)類似laucher左右拖動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android GestureDetector實(shí)現(xiàn)手勢滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android GestureDetector實(shí)現(xiàn)手勢滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05