標籤:自己實現 枚舉類型 parse str 風格 文字 direct type dir
根據 Hencoder 提供的知識點,進行學習和總結。
三個要點:
- 布局
- 繪製
- 觸摸反饋
繪製
- 自訂繪製:由自己實現繪製過程
- 常用繪製方法 onDraw(Canvas canvas)
- 繪製關鍵:
- canvas: 繪製工具
- 繪製類方法
- drawCircle(): 畫圓
- drawRect():畫方形
- drawPath():畫路線
- drawText():畫文本
- drawBitmap():畫 bitmap
- 繪製協助工具輔助
- 繪製範圍的裁切
- 繪製內容的幾何變換
- paint: 本意顏料,Android中指加強顏料,可設定各種風格,比如是空心還是實心或者是粗細等
- 繪製順序: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
- 直接描述路徑
- 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() 一樣的,繪製圓角矩形
- xxxTo()--畫線(直線或者曲線)
- lineTo():畫直線,從當前位置向目標位置畫一條直線,參數為目標位置 x,y
- rLineTo(): 與 lineTo() 方法一樣,參數是相對當前位置的相對座標
- moveTo():移動到目標位置
- rMoveTo()
- cubicTo():畫三次貝茲路徑
- rCubicTo()
- quadTo():畫二次方貝茲曲線
- rQuadTo()
- arcTo: 畫弧形
- close():封閉當前子圖形,與 lineTo(起始座標)一樣
- 輔助的設定或計算
- setFillType():設定填充方式
- EVEN_ODD:奇偶原則,交叉填充模式,對於平面的任意一點,向任意方向射出一條射線,這條射線和圖形相交的次數(相交才算,相切不算)如果是奇數,則這個點被認為在圖形內部,是要被塗色的地區;如果是偶數,則這個點被認為在圖形外部,是不被塗色的地區。
- WINDING (預設值):非零環繞數原則,全填充模式
- INVERSE_EVEN_ODD
- INVERSE_WINDING
繪製 Bitmap
繪製文字
Android 自訂 View 知識點