网络测速全解析之一:自定义View基础知识(一)

效果如图:

网络测速全解析之一:自定义View基础知识(一)

整个项目的Github地址

一、基础知识:

基础知识,也就是最基本的自定义view需要掌握的知识,我这里主要是学习了GcsSloop大佬的view自定义系列博客(这里是博客地址

1.自定义view绘制流程调用链

网络测速全解析之一:自定义View基础知识(一)

2.android自定义坐标系(向右向下为正)

网络测速全解析之一:自定义View基础知识(一)

所以屏幕显示部分坐标系如下:

网络测速全解析之一:自定义View基础知识(一)

子控件和父控件的关系:

网络测速全解析之一:自定义View基础知识(一)

MotionEvent中:

getLeft、getTop、getRight、getBottom是相对于view本身距离父控件的位置。

getX和getY同理;而getRawX和getRawY则获得的是相对于屏幕默认坐标系的。

网络测速全解析之一:自定义View基础知识(一)

3.角度和弧度:

角度是60进制,弧度是10进制。

网络测速全解析之一:自定义View基础知识(一)

角度增大方向为顺时针

网络测速全解析之一:自定义View基础知识(一)

4.颜色:

网络测速全解析之一:自定义View基础知识(一)

颜色的获取方式:

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

5.分类与流程:

sloop分类方法:ViewGroup和View两类

a.view 的构造函数(四种),内部实现其实最后都会调用第四个

网络测速全解析之一:自定义View基础知识(一)

但是后面的两个参数一般不怎么用,一般主要用前面两个,而这两个的区别主要是调用的地方不同,目的不一样。

网络测速全解析之一:自定义View基础知识(一)

b.测量View的大小(onMeasure)

主要是为了取出准确的宽高值。

网络测速全解析之一:自定义View基础知识(一)

三种测量模式:UNSPECIFIED、EXACTLY、AT_MOST

网络测速全解析之一:自定义View基础知识(一)

修改view的宽高调用setMeasuredDimension方法。

网络测速全解析之一:自定义View基础知识(一)

c.确定view的大小(onSizeChanged)

网络测速全解析之一:自定义View基础知识(一)

d.View布局位置的确定(onLayout)

获得的是相对于父布局的位置信息:

网络测速全解析之一:自定义View基础知识(一)

e.绘制内容(onDraw):

主要使用Canvas绘制。

 

自定义View的整体流程:

网络测速全解析之一:自定义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

网络测速全解析之一:自定义View基础知识(一)

3.绘制:

网络测速全解析之一:自定义View基础知识(一)

直线

网络测速全解析之一:自定义View基础知识(一)

矩形

     绘制一个矩形至少需要两个点,一般选择左上角和右下角的两个点。

网络测速全解析之一:自定义View基础知识(一)

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

圆角矩形

网络测速全解析之一:自定义View基础知识(一)

后面的两个参数rx和ry是x方向和y方向的椭圆的两个半径

网络测速全解析之一:自定义View基础知识(一)

椭圆

网络测速全解析之一:自定义View基础知识(一)

原理是绘制一个矩形的内切圆形

网络测速全解析之一:自定义View基础知识(一)

网络测速全解析之一:自定义View基础知识(一)

前两个是圆心坐标,第三个是半径,最后一个是画笔。

圆弧

网络测速全解析之一:自定义View基础知识(一)

startAngle:开始角度

sweepAngle:扫过角度

useCenter:是否使用中心(使用的话就是将圆弧两个端点和中心连接起来)

 

画笔Paint的三种区别:描边(STROKE)、填充(FILL)、描边加填充(FILL_ADD_STROKE)

网络测速全解析之一:自定义View基础知识(一)