Android 自定義 View 知識點
阿新 • • 發佈:2018-04-11
移動 encode swe em1 red 鋸齒 枚舉類 map() tex
根據 Hencoder 提供的知識點,進行學習和總結。
三個要點:
- 布局
- 繪制
- 觸摸反饋
繪制
- 自定義繪制:由自己實現繪制過程
- 常用繪制方法 onDraw(Canvas canvas)
- 繪制關鍵:
- canvas: 繪制工具
- 繪制類方法
- drawCircle(): 畫圓
- drawRect():畫方形
- drawPath():畫路線
- drawText():畫文本
- drawBitmap():畫 bitmap
- 繪制輔助工具
- 繪制範圍的裁切
- 繪制內容的幾何變換
- paint: 本意顏料,Android中指加強顏料,可設置各種風格,比如是空心還是實心或者是粗細等
- 繪制順序:Android 按照順序繪制的。除了 onDraw() 繪制主體部分,還有繪制前景( Forground)和背景( BackGround)
- canvas: 繪制工具
示例:
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
- drawBitmap()
繪制文字
- drawText()
Android 自定義 View 知識點