效果相关:锯齿、绘制风格、线条风格、色彩优化、轮廓风格、阴影、浮雕等
抗锯齿
锯齿现象:图形分辨率过低,肉眼能察觉像素颗粒(实际图片已经是完美的)
抗锯齿:通过精细算法修改图形边缘处的像素颜色,使肉眼看起来更加平滑(其实使图片失真了)
效果设置抗锯齿:setAntiAlias (true) ;或 new Paint(Paint.ANTI_ALIAS_FLAG);
绘制风格
setStyle(Paint.Style style)
FILL:填充模式(默认)
STROKE:画线模式(即勾边模式)
FILL_AND_STROKE:两种模式一并使用,既画线又填充
线条风格
setStrokeWidth(float width)
简介:设置线条宽度,默认值是 0像素(依旧能画出像素为1的线)
区别:线条宽度为1,几何变换放大两倍,线条绘制宽度为2
线条宽度为0,几何变换放大两倍,线条绘制宽度总是为1(hairline mode发际线模式)
setStrokeCap(Paint.Cap cap)
简介:设置线头的形状,三种:BUTT 平头(默认)、ROUND 圆头、SQUARE 方头
注:虚线左边为线的实际长度。
效果setStrokeJoin(Paint.Join join)
简介:设置拐角的形状,三种:MITER 尖角(默认)、 BEVEL 平角和 ROUND 圆角
效果setStrokeMiter(float miter)
简介:建立在使用setStrokeJoin()上,用于设置MITER尖角型拐角的延长线的最大值
尖角补偿注:如果尖角过长,自动改用BEVEL平角来渲染连接点
所以miter参数是对于转角长度的限制,默认值4,大约29度的锐角
色彩优化
setDither(boolean dither)
简介:设置抖动来优化色彩深度降低时的绘制效果
抖动:在图像降低色彩深度绘制时,插入噪点有规律扰乱图形来,避免出现大片的色带与色块,使图像对于肉眼更真实。
使用场景:适合于自建bitmap选择低色彩深度ARGB_4444 或者 RGB_565的时候
(由于现在色彩深度使用ARGB_8888,抖动没以前那么实用了)
效果setFilterBitmap(boolean filter)
简介:设置双线性过滤来优化 Bitmap 放大绘制的效果
双线性过滤:图像放大绘制时,默认使用最近邻插值过滤,会出现马赛克现象,开启双线性过滤让图像显得更加平滑
效果图形的轮廓风格
setPathEffect(PathEffect effect)
PathEffect 分为两类:单一效果的 CornerPathEffect,DiscretePathEffect,DashPathEffect,PathDashPathEffect
组合效果的 SumPathEffect,ComposePathEffect
CornerPathEffect
简介:把拐角变成圆角,radius圆角半径
使用:mPaint.setPathEffect(new CornerPathEffect(50));
效果DiscretePathEffect
简介:离散效果,把线条进行随机的偏离,"杂点"密集时可模拟生锈铁丝的效果
使用:mPaint.setPathEffect(new DiscretePathEffect(3.0F, 5.0F));
参数:segmentLength:用来拼接的每个线段的长度
deviation:与原始路径的偏离度
效果DashPathEffect
简介:使用虚线来绘制线条
使用:paint.setPathEffect(new DashPathEffect(new float[]{50,10}, 0));
参数:intervals:float[]参数必须成对且>=2,参数1表示实线的长度,参数2表示空白线的长度;
new float[]{20,10}:第一条实线20,第二条空白线10,循环。(即20,10,20,10)
newfloat[] {20, 10, 50, 5, 100, 30, 10, 5}:对每个实线和空白线进行设置
phase:绘制时的偏移量;(如果实线长10,偏移3,则实线从3~10部分开始绘制长度为7的实线)
拓展:利用DashPathEffect实现路径跟踪绘制的动画效果(比如心电图动画,实际时一直改变phase值)
效果PathDashPathEffect
简介:使用一个Path来绘制虚线(自定义虚线样式)
使用:new PathDashPathEffect(path, advance, phase,PathDashPathEffect.Style.ROTATE);
参数:shape:用来绘制的 Path
advance:是两个相邻的 shape 段 [ 起点 ] 之间的间隔(非前一个终点和后一个起点)
style:三种:TRANSLATE 位移、ROTATE 旋转、MORPH 变体
效果SumPathEffect
简介:按照两种PathEffect分别对目标进行绘制(两效果互不干扰)
效果ComposePathEffect
简介:先对一个目标Path使用innerpePathEffect,再对改变的目标path使用outerpePathEffect
效果关闭硬件加速的场景
1.使用Canvas.drawLine() 和 Canvas.drawLines() 方法画直线时
2.使用PathDashPathEffect 时
绘制后添加额外效果
setShadowLayer(float radius, float dx, float dy, int shadowColor)
简介:在之后的绘制内容下面加一层阴影
参数:radius:阴影的模糊范围
dx,dy:阴影的偏移量
shadowColor:阴影的颜色
注:1.文字之外的绘制必须关闭硬件加速才能正常绘制阴影
2.如果shadowColor阴影颜色本身是半透明的,阴影的透明度就使用本身
如果本身不透明,阴影的透明度就使用paint 的透明度
效果setMaskFilter(MaskFilter maskfilter)
简介:为之后的绘制设置 MaskFilter,基于整个画面来进行过滤(API14以上需关闭硬件加速)
1.BlurMaskFilter:模糊效果
构造:BlurMaskFilter(float radius, BlurMaskFilter.Blur style)
参数:radius:模糊的范围
style:模糊的类型NORMAL、SOLOD、INNER、OUTER
效果2.EmbossMaskFilter:浮雕效果
构造:EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius)
参数:direction:浮点型数组,控制x,y,z轴的光源方向
ambient:环境光的强度,数值范围是 0 到 1
specular:炫光/镜面反射的系数
blurRadius:应用光线的范围
效果获取绘制的 Path
getFillPath(Path src, Path dst)
简介:获取实际path,src 是原 Path,dst 就是实际 Path 的保存位置
实际path:drawPath() 的绘制内容的轮廓,要算上线条宽度和设置的 PathEffect
效果getTextPath(String text, int start, int end, float x, float y, Path path)
getTextPath(char[] text, int index, int count, float x, float y, Path path)
简介:获取文字的path
文字的path:文字信息全是被转化成图形,对图形进行绘制的
效果初始化类相关
reset():重置 Paint 的所有属性为默认值(相当于重新new,但性能更高)
set(Paint src):把 src 的所有属性全部复制过来
setFlags(int flags):可批量设置 flags
paint.setFlags(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG);
= paint.setAntiAlias(true); + paint.setDither(true);
网友评论