Paint类介绍
- 下面就一起来学习这些用法:
setARGB(int a,int r,int g,int b);设置画笔颜色
mPaint.setARGB( 255, 35, 31, 42 );
setAntiAlias(boolean aa); 会平滑一些
mPaint.setAntiAlias( true );
设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
setDither(boolean dither); 颜色更精细
mPaint.setDither( true );
setMaskFilter(MaskFilter maskfilter); 实现滤镜的效果
Android包含了下面几种MaskFilter:
- BlurMaskFilter 指定了一个模糊的样式和半径来处理Paint的边缘。
EmbossMaskFilter 指定了光源的方向和环境光强度来添加浮雕效果。
[x] 需要注意的是,由于在GPU硬件加速模式下,Paint的setMaskFilter不被GPU支持,所以为了能够正常使用setMaskFilter方法,我们需要将我们要绘制的View使用软件渲染模式
//为了确保画笔的setMaskFilter能供起效,我们需要对MyView禁用掉GPU硬件加速
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
//View从API Level 11才加入setLayerType方法
//设置myView以软件渲染模式绘图
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
BlurMaskFilter 模糊效果
new BlurMaskFilter(float radius, Blur style)
radius: 阴影的模糊半径,如上图所示,其值越大表示图形绘制出来越模糊,其值越小图形越清晰。
Blur style:
类型 | h效果 |
---|---|
NORMAL | 同时绘制图形本身内容+内阴影+外阴影,即正常阴影效果 |
SOLID | 只绘制外阴影和图形内容本身,不绘制内阴影。 |
OUTER | 不绘制图形内容以及内阴影,只绘制外阴影,即图形轮廓以内完全不绘制,轮廓线以内完全是空白的。 |
INNER | 绘制图形内容本身+内阴影,不绘制外阴影。 |
EmbossMaskFilter 浮雕效果
new EmbossMaskFilter (float[] direction, float ambient, float specular, float blurRadius)
- direction
是一个float类型的数组,表示光线的方向,是个向量,包含三个值,分别是x分量、y分量、z分量,这三个值的绝对大小并不重要,因为direction最后在真正被Android使用时会被归一化成一个单位向量,即变成长度为1的向量。direction中的坐标是在所画图形的右手坐标系中定义的,如下图所示:
ambient
表示环境光因子,float类型,取值是0到1,值越接近于0,环境光越暗,值越接近于1,环境光越亮。
specular
表示镜面反射因子,float类型,取值也是0到1。镜面反射就是模拟像镜子一样的高光反射,值越接近于0,镜面反射越强,被光照照射到的地方更容易出现很白很亮的状态,即高光效果。
blurRadius
表示模糊半径,是float类型,其值越大,模糊效果越明显。
setColorFilter(ColorFilter filter) 设置颜色过滤器
可以直接传入
- ColorMatrixColorFilter
- LightingColorFilter
- PorterDuffColorFilter
的对象作为参数
ColorMatrixColorFilter 色彩矩阵颜色过滤器
在Android中图片是以RGBA像素点的形式加载到内存中的,修改这些像素信息需要一个叫做ColorMatrix类的支持,这个类其实定义的是一个矩阵,是一个4x5的float[]类型的矩阵
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
1, 0, 0, 0, 0, // 红色向量
0, 1, 0, 0, 0, // 绿色向量
0, 0, 1, 0, 0, // 蓝色向量
0, 0, 0, 1, 0, // 透明度向量
});
其中,第一行表示的R(红色)的向量,第二行表示的G(绿色)的向量,第三行表示的B(蓝色)的向量,最后一行表示A(透明度)的向量
这个矩阵不同的位置表示的R、G、B、A值,其范围在0.0F至2.0F之间,1为保持原图的RGB值。每一行的第五列数字表示”偏移值“。
- ”偏移值“:比如:(255, 253, 251, 247)和纯白(255, 255, 255, 255)之间的偏移值(0, 2, 4, 8)我们称之为白平衡的色彩偏移
我们来看看这个矩阵是怎么计算的。其实说白了就是矩阵之间的运算乘积:
这里MyColor的RGBA值我们需要转换为[0,1]。通过这种计算我们可以将我们自己设定的颜色和矩阵的颜色进行叠加,创立一个新的颜色
// 生成色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
-1