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填充樣式
填充樣式表示繪線(xiàn)和填充的選擇:
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é)合處為直線(xiàn))
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智能指針輕量級(jí)Light Pointer初識(shí)
這篇文章主要為大家介紹了Android智能指針輕量級(jí)Light Pointer初識(shí)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android利用Hero實(shí)現(xiàn)列表與詳情頁(yè)無(wú)縫切換動(dòng)畫(huà)
本文我們將利用Hero動(dòng)畫(huà)實(shí)現(xiàn)一個(gè)簡(jiǎn)單案例:實(shí)現(xiàn)列表與詳情頁(yè)無(wú)縫切換動(dòng)畫(huà),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-06-06
android中實(shí)現(xiàn)OkHttp下載文件并帶進(jìn)度條
本篇文章主要介紹了android中實(shí)現(xiàn)OkHttp下載文件并帶進(jìn)度條,OkHttp是比較火的網(wǎng)絡(luò)框架,它支持同步與異步請(qǐng)求,支持緩存,可以攔截,更方便下載大文件與上傳文件的操作,有興趣的可以了解一下2017-07-07
詳解BadTokenException報(bào)錯(cuò)解決方法
這篇文章主要介紹了BadTokenException報(bào)錯(cuò)的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Android ScrollView取消慣性滾動(dòng)的方法
下面小編就為大家?guī)?lái)一篇Android ScrollView取消慣性滾動(dòng)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
Android獲取監(jiān)聽(tīng)SD卡狀態(tài)
本篇文章主要介紹了Android獲取監(jiān)聽(tīng)SD卡狀態(tài),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Android自定義View原理(實(shí)戰(zhàn))
這篇文章主要介紹了Android自定義View原理,由于Android系統(tǒng)內(nèi)置的View不滿(mǎn)足我們的業(yè)務(wù)需求,變產(chǎn)生了需要自定義View的原因,關(guān)于自定義詳情,需要的小伙伴可以參考下面文章具體詳情2022-05-05
Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn)
這篇文章主要介紹了Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09

