天天看點

自定義View中的Paint和Path

public class BaseView extends View {
    
    //畫筆
    private Paint mPaint;
    //路徑
    private Path mPath;

    //覆寫的方法
    public BaseView(Context context, AttributeSet attrs) {
        super(context, attrs);

        initData();
    }

    private void initData() {
        //執行個體化畫筆
        mPaint=new Paint();
        //畫筆寬度
        mPaint.setStrokeWidth(3);
        //不填充
        mPaint.setStyle(Paint.Style.STROKE);
        //設定畫筆顔色
        mPaint.setColor(Color.RED);
        //設定抗鋸齒
        mPaint.setAntiAlias(true);


        //使用Path首先要new一個Path對象
        //Path的起點預設為坐标(0,0)
        //特别注意:建立全局Path對象,在onDraw()按需求修改,盡量不要在onDraw()方法中new
        //因為:若view頻繁重新整理,就會頻繁建立對象,拖慢重新整理的速度
        mPath=new Path();

    }
           
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //預設起點(0,0)

        //連接配接點到
        mPath.lineTo(400,500);

        //移動到點(800,200)
        mPath.moveTo(800,200);
        mPath.lineTo(400,500);
        mPath.lineTo(300,100);
        //moveTo(800,200)表示已經是新的起點,Path.close()就3點進行閉合
        mPath.close();

        canvas.drawPath(mPath,mPaint);

    }
           

實作的效果:

自定義View中的Paint和Path

2)方法:setLastPoint()

自定義View中的Paint和Path

運作結果:

自定義View中的Paint和Path

2、關于重置路徑

重置Path的兩個方法:reset() 和 rewind()

方法 是否保留原有的資料結構 是否保留FillType設定
mPath.reset()               否              是
mPath.rewind()                   是              否

資料結構 影響重建的速度, FillType 影響顯示效果。是以我們一般選擇 Path.reset().

3、添加路徑

3.1添加基本圖形

作用:在Path路徑中添加基本圖形,如圓形路徑、圓弧路徑等等

自定義View中的Paint和Path
自定義View中的Paint和Path
自定義View中的Paint和Path
自定義View中的Paint和Path
自定義View中的Paint和Path

從上面的方法當中我們發現有個 dir 的參數。dir = Direction = 圖形的方向。CW:順時針。CCW:逆時針。舉例:

順時針:

自定義View中的Paint和Path

逆時針:

自定義View中的Paint和Path
自定義View中的Paint和Path

結果:

自定義View中的Paint和Path
自定義View中的Paint和Path

結果:

自定義View中的Paint和Path
自定義View中的Paint和Path

結果:

自定義View中的Paint和Path
自定義View中的Paint和Path

結果:

自定義View中的Paint和Path

結果:

自定義View中的Paint和Path

3.2添加路徑

作用:合并路徑

自定義View中的Paint和Path

具體使用:

自定義View中的Paint和Path

結果:

自定義View中的Paint和Path
自定義View中的Paint和Path

運作結果:

自定義View中的Paint和Path

判斷路徑屬性:

1)代替set

自定義View中的Paint和Path

2)平移offset

自定義View中的Paint和Path

運作結果:

自定義View中的Paint和Path

4、布爾操作

作用:兩個路徑Path之間的運算

應用場景:用簡單的圖形通過特定規定合成相對複雜的圖形

自定義View中的Paint和Path

異或示例:

自定義View中的Paint和Path

運作結果:

自定義View中的Paint和Path