1. 程式人生 > 其它 >Android——繪圖工具類Canvas,Paint,Path。

Android——繪圖工具類Canvas,Paint,Path。

簡介

  Android通過繪圖工具類,在Canvas上重繪元件。

  Canvas:畫布,用於繪製圖形

  構造方法:

    Canvas(Bitmap):

      在Bitmap上繪製圖形。

    Canvas():

      建立一個空畫布,沒什麼用。

  方法:

    void drawRect(float left, float top, float right, float bottom, Paint paint)

      引數:

        left:矩形左邊x座標

        top:矩形頂部y座標

        right:矩形右邊x座標

        bottom:矩形底部y座標  

        paint:畫筆

      返回值:無

      返回值意義:無

      作用:根據left,top,right,bottom座標和paint畫筆樣式設定,繪製矩形。    

    void drawOval(float left,float top,float right,float bottom,Paint paint)

      引數:

        left:圓形左邊x座標

        top:圓形頂部y座標

        right:圓形右邊x座標

        bottom:圓形底部y座標

        paint:畫筆

      返回值:無

      返回值意義:無

      作用:根據left,top,right,bottom座標和paint畫筆樣式設定,繪製圓形。

    void drawRoundRect(float left , float top , float right , float bottom , float rx , float ry , Paint paint)

      引數:

        left:圓角矩形左邊x座標

        top:圓角矩形頂部y座標

        right:圓角矩形右邊x座標

        bottom:圓角矩形底部y座標

        rx:圓角矩形的圓角rx長度

        ry:圓角矩形的圓角ry長度

      返回值:無

      返回值意義:無

      作用:根據left,top,right,bottom座標和圓角的rx,ry半徑和paint畫筆。繪製圓角矩形。

      

    void drawPath(Path path , Paint paint)

      引數:

        path:路徑物件

        paint:畫筆

      返回值:無

      返回值意義:無

      作用:用path設定最後一個點和上一個點的座標進行繪製圖形

    

    int saveLayer(RectF bounds, Paint paint, int saveFlags)

      引數:

        bounds:要儲存的矩形四邊座標

        paint:畫筆

        saveFlags:Canvas.xxxxxFlag

      返回值:int

      返回值意義:第幾次儲存的數

      作用:

        儲存當前矩陣並將其剪輯到私有堆疊上。

        隨後對平移、縮放、旋轉、傾斜、concat或clipRect、clipPath的呼叫都將照常執行,但當對restore()進行平衡呼叫時,這些呼叫將被忘記,而save()之前存在的設定將被恢復。

    save方法用於臨時儲存畫布座標系統的狀態

    restore方法可以用來恢復save之後設定的狀態,

    void restoreToCount( int count )

      引數:

        count : 要恢復的矩形引數

      返回值:void

      返回值意義:void

      作用:恢復之前設定的座標

      (主要是自定義元件的時候使用)

    

類:

  Paint:畫筆,設定繪畫樣式。如顏色,粗細,看據此。

  方法

    void setColor(Color color)

      引數:

        color:顏色物件

      返回值:void

      返回值意義:無

      作用:設定畫筆顏色

    

    void setStrokeWidth( int strokeWidth )

      引數:

        strokeWidth:畫筆粗細

      返回值:void

      返回值意義:無

      作用:設定畫筆粗細

    

    void setAntiAlias(boolean isAntiAlias)

      引數:

        antialias:是否開啟抗鋸齒

      返回值:void  

      返回值意義:無

      作用:開啟抗鋸齒

  

    void setStyle(int Style)

      引數:

        style:選值。Paint.Style.Fill,Paint.style.STROKE.

      返回值:無

      返回值意義:無

      作用:選擇畫筆的風格:填充,描邊

  

  Path:路徑物件,設定第一個點(moveTo(ifloat x , float y))和下一個點(lineTo(float x , flaot y ))

  方法:

    void moveTo(float x , float y)

    引數:

      x:點的x座標

      y:點的y座標

    返回值:無

    返回值意義:無

    作用:移動Path到第一個點

    

    void lineTo(float x , float y)

    引數:

      x:點的x座標

      y:點的y座標

    返回值:無

    返回值意義:無

    作用:移動Path到下一個點。

使用:

  

// 用Canvas ,Paint,Path:製作個人繪畫板

public class MyPaint07 extends View {
    private Paint paint;
    private Path path;


    public MyPaint07(Context context) {
        super(context);
        init();
    }

    public MyPaint07(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyPaint07(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    public MyPaint07(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }

    public void init(){
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.parseColor("#00ff00"));
        paint.setStrokeWidth(10);
        path = new Path();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path,paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        switch ( event.getAction() ){
            case MotionEvent.ACTION_DOWN:
                Log.i(TAG, "onTouchEvent: do it");
                path.moveTo(event.getX(),event.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(event.getX(),event.getY());
                break;
        }
        invalidate();
        return true;
    }

    private static final String TAG = "MyPaint07";
}