1. 程式人生 > >Android 自定義 View 知識點

Android 自定義 View 知識點

移動 encode swe em1 red 鋸齒 枚舉類 map() tex

根據 Hencoder 提供的知識點,進行學習和總結。

三個要點:

  1. 布局
  2. 繪制
  3. 觸摸反饋

繪制

  • 自定義繪制:由自己實現繪制過程
  • 常用繪制方法 onDraw(Canvas canvas)
  • 繪制關鍵:
    1. canvas: 繪制工具
      • 繪制類方法
      • drawCircle(): 畫圓
      • drawRect():畫方形
      • drawPath():畫路線
      • drawText():畫文本
      • drawBitmap():畫 bitmap
      • 繪制輔助工具
      • 繪制範圍的裁切
      • 繪制內容的幾何變換
    2. paint: 本意顏料,Android中指加強顏料,可設置各種風格,比如是空心還是實心或者是粗細等
    3. 繪制順序:Android 按照順序繪制的。除了 onDraw() 繪制主體部分,還有繪制前景( Forground)和背景( BackGround)

示例:

Paint 常見設置:

  • mPaint.setColor(Color.RED):設置顏色
  • mPaint.setStyle(Style.STROKE):設置繪制模式
  • mPaint.setStrokeWidth(20):設置線條開關
  • mPaint.setAntiAlias(true):設置抗鋸齒

Cancan 繪制類方法

繪制顏色

* canvas.drawColor(Color.RED);
* canvas.drawColor(Color.parseColor("#00ff00"));
* canvas.drawColor(Color.parseColor("#8800ff00"));
* canvas.drawRGB(255, 0, 0);
* canvas.drawARGB(100, 255, 0, 0);

繪制圓

1. 實心圓: 

        mPaint = new Paint();
        canvas.drawCircle(100, 100, 50, mPaint);

2. 空心圓  

        mPaint.setStyle(Style.STROKE);
        canvas.drawCircle(200, 200, 50, mPaint);

3. 藍色實心圓

        mPaint.setStyle(Style.FILL);
        mPaint.setColor(Color.BLUE);
        canvas.drawCircle(200, 400, 50, mPaint);

4. 線寬為20的空心圓

        mPaint.setStyle(Style.STROKE);
        mPaint.setStrokeWidth(20);
        canvas.drawCircle(400, 200, 50, mPaint);

繪制橢圓

    canvas.drawOval(300, 100, 700, 300, mPaint);

繪制矩形

    canvas.drawRect(250, 500, 700, 800, mPaint);
    //
    Rect tem1 = new Rect(250, 500, 700, 800);
    canvas.drawRect(tem1, mPaint);
    //
    RectF tem2 = new RectF(250, 500, 700, 800);
    canvas.drawRect(tem2, mPaint);

繪制圓角矩形

    RectF t = new RectF(150, 200, 500, 350);
    canvas.drawRoundRect(t, 50, 50, mPaint);
    //
    canvas.drawRoundRect(150, 200, 500, 350, 50, 50, mPaint);

繪制弧形或者扇形

  • drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, Paint paint)
    * left,top,right,bottom:弧形所在的橢圓
    * startAngle:弧形的起始角度(x 軸的正向,即正右的方向,0度的位置。順時針為正角度,逆時針為負角度)
    * sweepAngle:弧形劃過的角度
    * useCenter:表示十分連接圓心,連接圓心是扇形不連接圓心是弧形

  • 繪制弧形

    canvas.drawArc(200, 600, 800, 1000, 0, 47, false, mPaint);
  • 繪制扇形

    canvas.drawArc(200, 600, 800, 1000, 0, 135, true, mPaint);
  • 示例:

    mPaint.setAntiAlias(true);
    mPaint.setStyle(Style.FILL);
    canvas.drawArc(200, 100, 800, 500, -110, 100, true, mPaint); // 繪制扇形
    canvas.drawArc(200, 100, 800, 500, 20, 140, false, mPaint); // 繪制弧形
    mPaint.setStyle(Paint.Style.STROKE); // 畫線模式
    canvas.drawArc(200, 100, 800, 500, 180, 60, false, mPaint); // 繪制不封口的弧形

畫自定義圖形

  • drawPath(Path path, Paint paint): 通過描述路徑的方式來繪制圖形
  • path: 描述路徑的對象
  • paint:

  • Path
  • 直接描述路徑
    1. addXxx() -- 添加子圖形
    • addCircle(float x, float y, float radius, Direction dir),該方法與 Canvas 的 drawCircle() 一樣的,繪制圓形
      • 描述:添加圓
      • 參數 x 和參數 y :確定圓心
      • 參數 radius: 確定圓的半徑
      • dir: 畫圓路徑的方向,枚舉類型,CW(clockwise)順時針/CCW(counter-clockwise)逆時針
    • addArc():與 Canvas 的 drawArc() 一樣,繪制弧形或者扇形
    • addOval():與 Canvas 的 drawOval() 一樣,繪制橢圓
    • addRect():與 Canvas 的 drawRect() 一樣,繪制矩形
    • addRoundRect():與 Canvas 的 drawRoundRect() 一樣的,繪制圓角矩形
    1. xxxTo()--畫線(直線或者曲線)
    • lineTo():畫直線,從當前位置向目標位置畫一條直線,參數為目標位置 x,y
    • rLineTo(): 與 lineTo() 方法一樣,參數是相對當前位置的相對坐標
    • moveTo():移動到目標位置
    • rMoveTo()
    • cubicTo():畫三次貝塞爾曲線
    • rCubicTo()
    • quadTo():畫二次貝塞爾曲線
    • rQuadTo()
    • arcTo: 畫弧形
    1. close():封閉當前子圖形,與 lineTo(起始坐標)一樣
  • 輔助的設置或計算
    • setFillType():設置填充方式
    • EVEN_ODD:奇偶原則,交叉填充模式,對於平面的任意一點,向任意方向射出一條射線,這條射線和圖形相交的次數(相交才算,相切不算)如果是奇數,則這個點被認為在圖形內部,是要被塗色的區域;如果是偶數,則這個點被認為在圖形外部,是不被塗色的區域。
    • WINDING (默認值):非零環繞數原則,全填充模式
    • INVERSE_EVEN_ODD
    • INVERSE_WINDING

繪制 Bitmap

  • drawBitmap()

繪制文字

  • drawText()

Android 自定義 View 知識點