我們知道Android中Canvas類(lèi)對(duì)象可以進(jìn)行繪制事物该抒,里面有一個(gè)方法為canvas.drawPath方法,這個(gè)方法就是用來(lái)繪制我們的自定義Path對(duì)象炼吴。Path對(duì)象很有用确垫,我們可以繪制一些特殊的動(dòng)畫(huà)效果,文字吸附效果等等哆致。所以我們需要來(lái)學(xué)習(xí)下Path對(duì)象的使用。
要想使用path做出漂亮的圖片患膛,
比如水波加載
比如
怎么使用path摊阀?
以下是Path的基本操作的方法:
第一類(lèi)(直線與點(diǎn)的操作):lineTo,moveTo,setLastPoint,close
第二類(lèi)(基本形狀):
addXxx,arcTo
第三類(lèi)(設(shè)置方法) :
set(),offset(),reset()
第四類(lèi)(判斷方法) :isConvex(),isEmpty(),isRect(RectF rect)
這些方法之前都要做一個(gè)畫(huà)筆的初始化,代碼如下:
private void initPaint() {
mPath = new Path();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(8);
mPaint.setColor(ContextCompat.getColor(this.getContext(), R.color.colorAccent));
}
Path常用方法表
移動(dòng)起點(diǎn) moveTo 移動(dòng)下一次操作的起點(diǎn)位置
設(shè)置終點(diǎn) setLastPoint 重置當(dāng)前path中最后一個(gè)點(diǎn)位置踪蹬,如果在繪制之前調(diào)用胞此,效果和moveTo相同
連接直線 lineTo 添加上一個(gè)點(diǎn)到當(dāng)前點(diǎn)之間的直線到Path
閉合路徑 close 連接第一個(gè)點(diǎn)連接到最后一個(gè)點(diǎn),形成一個(gè)閉合區(qū)域
添加內(nèi)容 addRect, addRoundRect, addOval, addCircle, addPath, addArc, arcTo 添加(矩形跃捣, 圓角矩形漱牵, 橢圓, 圓疚漆, 路徑酣胀, 圓弧) 到當(dāng)前Path (注意addArc和arcTo的區(qū)別)
/**
* 線的操作
*/
mPath.moveTo(100, 100);
mPath.lineTo(300, 300);
mPath.lineTo(100, 300);
mPath.lineTo(100, 100);
mPath.moveTo(300, 300);
mPath.lineTo(500, 300);
mPath.setLastPoint(500, 500);//改變上一次操作路徑的結(jié)束坐標(biāo)點(diǎn)
mPath.lineTo(100, 500);
mPath.close();
/**
* 基本形狀
*/
RectF rectF = new RectF(100,800,200,900);
mPath.addRect(rectF, Path.Direction.CW);
mPath.setLastPoint(150,1000);
mPath.addCircle(500,1000,200, Path.Direction.CW);
rectF = new RectF(100,1200,500,1700);
mPath.addRoundRect(rectF,100,100, Path.Direction.CW);//圓角的兩個(gè)半徑
canvas.drawPath(mPath, mPaint);//畫(huà)出路徑
addPath(添加Path):
將兩個(gè)path合并在一起刁赦,方法如下
public void addPath (Path src)
public void addPath (Path src, float dx, float dy)
public void addPath (Path src, Matrix matrix)
addPath的第二個(gè)方法的 dx 和 dy 兩個(gè)參數(shù)是什么意思呢?
其實(shí)它們是代表添加path后的位移值闻镶。
設(shè)置方法
1 set()
方法預(yù)覽:
public void set(Path src)
將新的path賦值到現(xiàn)有的path
2 offset()
方法預(yù)覽:
public void offset (float dx, float dy) ;
public void offset (float dx, float dy, Path dst)
將path進(jìn)行平移
offset的第二個(gè)方法的第三個(gè)參數(shù)的意思就是將平移后的path存儲(chǔ)到dst參數(shù)中甚脉。如果傳入dst不為空,將平移后的狀態(tài)存儲(chǔ)到dst中铆农,不影響當(dāng)前path牺氨。dst為空,平移作用當(dāng)前的path墩剖,相當(dāng)于第一個(gè)方法波闹。
3 reset()
方法預(yù)覽:
public void reset()
這個(gè)方法很簡(jiǎn)單,就是將path的所有操作都清空掉涛碑。
也歡迎關(guān)注我的CSDN和github主頁(yè)