介绍
Paint (画笔) 负责在Canvas (画布)上画出各种图形
常见属性
常量
- ANTI_ALIAS_FLAG 开启抗锯齿功能的标记。
- DITHER_FLAG 在绘制时启用抖动的标志。
- FILTER_BITMAP_FLAG 绘制标志,在缩放的位图上启用双线性采样。
使用:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
或
paint.setFlags(Paint.DITHER_FLAG);
不过并不建议使用 setFlags 方法,这是因为 setFlags方法会覆盖之前设置的内容
构造方法
- new Paint(); 创建一个新画笔
- new Paint(int flags); 创建一个带标志的新画笔
- new Paint(Paint paint); 创建一个新画笔,并使用指定画笔参数初始化
公开方法(常用)
- setColor(int color) //设置画笔颜色
- setFlags(int flags) //设置画笔标志位
- reset() //重置画笔
- setStrokeWidth(float width) //设置线条的宽度
- setStyle(Paint.Style style) //设置绘制模式
- setStrokeCap(Paint.Cap cap) //设置线帽
- setStrokeJoin(Paint.Join join) //设置连接方式
- setPathEffect(PathEffect effect) //设置Path 效果
内部类
Paint.Style
Style指定绘制的图元是否被填充,描边或两者均有(以相同的颜色)。
- Paint.Style.FILL 填充,(默认模式)。
- Paint.Style.STROKE 描边,只绘制图形轮廓。
- Paint.Style.FILL_AND_STROKE 描边加填充
Paint.Cap
Cap指定了描边线和路径(Path)的开始和结束显示效果。
- Paint.Cap.BUTT 无线帽,(默认类型)
- Paint.Cap.SQUARE 以线条宽度为大小,在开头和结尾分别添加半个正方形。
- Paint.Cap.ROUND 以线条宽度为直径,在开头和结尾分别添加一个半圆。
Paint.Join
Join指定线条和曲线段在描边路径上连接的处理。
- Paint.Join.MITER 尖角 (默认模式)
- Paint.Join.BEVEL 平角
- Paint.Join.ROUND 圆角
PathEffect
顾名思义,它就是给path设置样式(效果)的,效果是由它的六个子类实现的:
- 1.CornerPathEffect
CornerPathEffect则可以将路径的转角变得圆滑,CornerPathEffect的构造方法只接受一个参数radius,意思就是转角处的圆滑程度。
public CornerPathEffect(float radius)
转换绘制的几何图形(描边或填充样式)将线段之间的锐角替换为圆角
radius 指定的半径。 - 2.DiscretePathEffect
DiscretePathEffect(离散路径效果)相对来说则稍微复杂点,其会在路径上绘制很多“杂点”的突出来模拟一种类似生锈铁丝的效果。其构造方法有两个参数:
segmentLength 将路径分割成分段长度的行 指定这些突出的“杂点”的密度,值越小杂点越密集;
deviation 随机偏离原始路径的偏差 值越大突出的距离越大反之反之。
public DiscretePathEffect(float segmentLength, float deviation)
- 3.DashPathEffect
DashPathEffect 用于实现虚线效果(适用于 STROKE 或 FILL_AND_STROKE 样式)。
intervals 间隔数组必须包含偶数项(>=2)
phase 相位是间隔中的偏移量
public DashPathEffect(float intervals[], float phase)
- 4.PathDashPathEffect
PathDashPathEffect和DashPathEffect是类似的,不同的是PathDashPathEffect可以让我们自己定义路径虚线的样式,比如我们将其换成一个个小圆组成的虚线:
shape 一系列形状的路径
advance 形状的间隔
phase 要偏移的相位量
style 样式设置
public PathDashPathEffect(Path shape, float advance, float phase, Style style)
- 5.ComposePathEffect
是合并两种效果,只不过先应用一种效果后,再次叠加另一种效果,因此交换参数最终得到的效果是不同的。
//构建一个pathEffect,其效果是先应用内部效果和外部的patheeffect(例如,outer(inner(path)))。
public ComposePathEffect(PathEffect outerpe, PathEffect innerpe)
- 6.SumPathEffect
用于合并两种效果,它相当于两种效果都绘制一遍。
//构造一个pathEffect,其效果是依次应用两个效果(例如first(path) + second(path))
public SumPathEffect(PathEffect first, PathEffect second)
参考:链接: http://t.zoukankan.com/guanxinjing-p-9708601.html