Android onDraw


Paint 画笔

Paint是canvas里面最重要的参数,没有之一,canvas除非是利用图片绘制,否则都需要画笔这个参数,并且是@NOTNULL的限制,利用这个画笔,你才能绘制出你想要的东西

setMaskFilter(MaskFilter maskfilter);

设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等

setShader(Shader shader);

设置图像效果,使用Shader可以绘制出各种渐变效果

setShadowLayer(float radius ,float dx,float dy,int color);

在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色

setColorFilter(ColorFilter colorfilter);

设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果

setStyle(Paint.Style style);

设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE

setStrokeCap(Paint.Cap cap);

当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式 Cap.ROUND,或方形样式Cap.SQUARE

setSrokeJoin(Paint.Join join);

设置绘制时各图形的结合方式,如平滑效果等

setStrokeWidth(float width);

当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度

setXfermode(Xfermode xfermode);

设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果

setUnderlineText(boolean underlineText);

设置带有下划线的文字效果

setStrikeThruText(boolean strikeThruText);

设置带有删除线的效果

注意: new Paint(Paint.ANTI_ALIAS_FLAG) 可以直接去除锯齿 其实是用的flag字段表示的

RectF Rect

Rect 就是标识一块地方 大小是right-left bootom-top这么大只不过这里是int值的
RectF值跟Rect差不多 只不过是float值

你会发现Canvas里面只要有方法是用Rect的基本上都有同名方法用RectF的

Path

path在我的理解中 其实是一个路径,你可以使用patH显示moveto某个坐标,然后lineto另外一个坐标,最后用closed来连接最后一个和第一个坐标形成一个图型,如果不closed可以在lineto起始坐标其实是一样的

Shader

使用Shader可以做出渐变色的效果

MaskFilter

Canvas

Canvas是画布,提供了各种绘画的方法,在画布(View)上绘制你想要的图像,这里只是绘制。在这之前已经执行了onMeasure和onLayout方法你已经知道自己的view的大小和位置了,所以可以根据自己的要求绘制在你的view的任何地方。

Canvas里的draw方法大都是native的方法

drawCircle

drawCircle(float cx, float cy, float radius, Paint paint)

cx和cy分别是此view相对于自己左上角的距离

radius是半径,如果你的半径特别大,超出了范围,那么他不会管你而是按照你的设定继续绘制,当然 你可能显示不完整

drawRect

drawRect(float left, float top, float right, float bottom, Paint paint)
left和top分别是此view相对于自己左上角的距离
大小是right-left bootom-top这么大

drawOval

drawOval(RectF oval, Paint paint)
其实是在指定区域里面绘制一个圆形 如果这个区域是正方形 那这个就是圆形 如果这个区域是长方形 那么这就是一个椭圆