绘画是自定义View的基础,Paint和canvas至关于绘画中的画笔和纸,掌握Paint和canvas可使咱们更加容易进行自定义View。canvas
1、setAntiAlias()
通常用于绘制不规则图形的时候,使用抗锯齿,好比圆形、文字等。对于规则的图形,是不须要打开抗锯齿功能的,好比矩形。 bash
2、setStyle()
设置填充的样式,主要用于控制几何图形
函数
3、setStrokeWidth()
设置画笔的宽度,单位是px.对画笔的STYLE设置成STROKE和FILL_AND_STROKE时有效。但画支线时不管style设置什么值,均有效。
工具
4、Paint.Cap
Cap指定了描边线和路径的开始和结束的处理。默认为BUTT。
字体
5、Paint.Join
Join指定线条和曲线段在描边路径上链接的处理。默认为MITER。
ui
1、画背景
canvas提供3种方法能够用于绘制画布的背景
spa
void drawColor(int color)
void drawARGB(int a,int r,int g,int b)
void drawRGB(int r,int g,int b)
复制代码
2、画直线
3d
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
复制代码
3、画矩形
矩形的范围可使用两个矩形工具类进行设置:Rect 和 RectF,二者的主要区别就是Rect存储的上下左右均为Int类型,而RectF存储的上下左右均为Float类型。 rest
4、画弧
code
注意事项:
canvas画弧时,0度的起始位置在x轴正方向上。
5、画文字
前面几个参数都很好理解,无非就是文本、索引值和绘画起始的x轴位置,但基线是什么,怎么求呢? Baseline是文字绘制时所参照的基准线,观察下图可看见基线是大部分英文字母的底部沿线。只有肯定Baseline的位置,才能将文字准确的绘制在咱们想要的位置上。
7、save()和restore()
每次调用save(),都会先保存当前画布的状态,而后将其放入到特定的栈中。
每次调用restore(),都会把栈顶的画布取出来,并按照这个状态恢复当前的画布,而后在这个画布上做画。
clipXX系列的函数对画布的操做是不可逆的,除非调用了save()和restore()对画布进行保存和恢复。
path表明路径,在canvas中使用drawPath(Path,Paint)进行绘画路径。
void moveTo(float x1,float y1)
void lineTo(float x2,float y2)
void close()
复制代码
(x1,y1)是直线的起始点,(x2,y2)是直线的终点,又是下一个绘制直线路径的起始点,lineTo能够无限用。
调用了moveTo()后,调用lineTo()画了N条直线,尚未造成闭环的话,能够调用close()将路径的首尾链接起来。
2、画弧形路径
3、addXXX系列函数
路径默认是连贯的,但addXXX()系列函数能够直接添加一些固定形状的路径,没必要考虑连贯性。
一、添加矩形路径
目前顺时针和逆时针的生成对矩形图形并没有影响,但对于根据路径方向绘画文字等,则会起到关键做用。
二、添加圆角矩形路径
三、添加圆形路径
四、添加椭圆路径
五、添加圆弧路径
具体参数和canvas绘制圆弧同样
1、测量文本宽高
一、经过Paint.measureText测量文本宽度
二、经过Paint.getTextBounds得到文字所在的矩形区域,能够的到宽高
三、经过Paint.FontMetrics or Paint.FontMetricsInt得到文本宽度
demo连接: 连接:pan.baidu.com/s/1GrP1XYFg… 提取码:wubw