自定義View-3Path高級操作

Path高級操作

-Path常用操作

作用 相關方法 備注
rXxx方法 rMoveTo,rLineTo,rQuadTo,rCubicTo 不帶r的方法是基于原點的坐標系,rXxx是基于當前點的坐標系
填充模式 setFillType,getFillType,
isInverseFillType,toggleInverseFillType
設置,獲取,判斷和切換填充模式
提示方法 incReserve 提示Path還有多少個點等待加入
布爾操作API19 op 對兩個Path進行布爾運算(差集,交集,并集,異或)
計算邊界 computeBounds 計算Path的邊界
重置路徑 reset,rewind 清除Path的內容,
reset不保留內部數據結構,但保留FillType
rewind保留內部數據結構,但不保留FillType
矩陣操作 transform 矩陣變換

-Path方法詳解

rXxx

path.moveTo(100,100);
path.rLineTo(100,200);
canvas.drawPath(path,mDeafultPaint);

填充模式
填充模式未完全理解


布爾操作

        Path path1 = new Path();
        Path path2 = new Path();
        Path path3 = new Path();
        Path path4 = new Path();

        path1.addArc(-200,-200,200,200,90,180);
        path2.addCircle(0,-100,100, Path.Direction.CW);
        path3.addCircle(0,100,100,Path.Direction.CW);
        path4.addCircle(-100,-100,30, Path.Direction.CW);

        path1.op(path2,Path.Op.UNION);
        path1.op(path3, Path.Op.DIFFERENCE);
        path1.op(path4,Path.Op.DIFFERENCE);

        canvas.drawPath(path1, mPaint);
太極陰陽魚,一個大半圓,和3個小半圓組成

計算邊界

//測量結果會放入Rect
void computeBounds (RectF bounds, boolean exact)

代碼:

        Path path = new Path();
        path.lineTo(100,50);
        path.lineTo(100,-50);
        path.close();
        path.addCircle(-100,0,100, Path.Direction.CW);

        RectF rectF = new RectF();
        path.computeBounds(rectF,true);

        canvas.drawPath(path,mPaint);

        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(rectF,mPaint);

結果:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容