1. 程式人生 > >網路測速全解析之一:自定義View基礎知識(一)

網路測速全解析之一:自定義View基礎知識(一)

效果如圖:

一、基礎知識:

基礎知識,也就是最基本的自定義view需要掌握的知識,我這裡主要是學習了GcsSloop大佬的view自定義系列部落格(這裡是部落格地址

1.自定義view繪製流程呼叫鏈

2.android自定義座標系(向右向下為正)

所以螢幕顯示部分座標系如下:

子控制元件和父控制元件的關係:

MotionEvent中:

getLeft、getTop、getRight、getBottom是相對於view本身距離父控制元件的位置。

getX和getY同理;而getRawX和getRawY則獲得的是相對於螢幕預設座標系的。

3.角度和弧度:

角度是60進位制,弧度是10進位制。

角度增大方向為順時針

4.顏色:

顏色的獲取方式:

Color.argb(alpha, red, green, blue);

5.分類與流程:

sloop分類方法:ViewGroup和View兩類

a.view 的建構函式(四種),內部實現其實最後都會呼叫第四個

但是後面的兩個引數一般不怎麼用,一般主要用前面兩個,而這兩個的區別主要是呼叫的地方不同,目的不一樣。

b.測量View的大小(onMeasure)

主要是為了取出準確的寬高值。

三種測量模式:UNSPECIFIED、EXACTLY、AT_MOST

修改view的寬高呼叫setMeasuredDimension方法。

c.確定view的大小(onSizeChanged)

d.View佈局位置的確定(onLayout)

獲得的是相對於父佈局的位置資訊:

e.繪製內容(onDraw):

主要使用Canvas繪製。

自定義View的整體流程:

二、Canvas繪製圖形

1.Canvas常用速查表:

操作型別 相關API 備註
繪製顏色 drawColor, drawRGB, drawARGB 使用單一顏色填充整個畫布
繪製基本形狀 drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRect, drawOval, drawCircle, drawArc 依次為 點、線、矩形、圓角矩形、橢圓、圓、圓弧
繪製圖片 drawBitmap, drawPicture 繪製點陣圖和圖片
繪製文字 drawText, drawPosText, drawTextOnPath 依次為 繪製文字、繪製文字時指定每個文字位置、根據路徑繪製文字
繪製路徑 drawPath 繪製路徑,繪製貝塞爾曲線時也需要用到該函式
頂點操作 drawVertices, drawBitmapMesh 通過對頂點操作可以使影象形變,drawVertices直接對畫布作用、 drawBitmapMesh只對繪製的Bitmap作用
畫布剪裁 clipPath, clipRect 設定畫布的顯示區域
畫布快照 save, restore, saveLayerXxx, restoreToCount, getSaveCount 依次為 儲存當前狀態、 回滾到上一次儲存的狀態、 儲存圖層狀態、 回滾到指定狀態、 獲取儲存次數
畫布變換 translate, scale, rotate, skew 依次為 位移、縮放、 旋轉、錯切
Matrix(矩陣) getMatrix, setMatrix, concat 實際上畫布的位移,縮放等操作的都是影象矩陣Matrix, 只不過Matrix比較難以理解和使用,故封裝了一些常用的方法。

2.建立畫筆:Paint

3.繪製:

直線

矩形

     繪製一個矩形至少需要兩個點,一般選擇左上角和右下角的兩個點。

Rect和RectF的不同之處是精度方面,Rect是int精度,RectF是float精度。

圓角矩形

後面的兩個引數rx和ry是x方向和y方向的橢圓的兩個半徑

橢圓

原理是繪製一個矩形的內切圓形

前兩個是圓心座標,第三個是半徑,最後一個是畫筆。

圓弧

startAngle:開始角度

sweepAngle:掃過角度

useCenter:是否使用中心(使用的話就是將圓弧兩個端點和中心連線起來)

畫筆Paint的三種區別:描邊(STROKE)、填充(FILL)、描邊加填充(FILL_ADD_STROKE)