MaskFilter我们不妨把它叫做面具,就是给所要画的东西套上一个面具,让你的要画的东西达到你想要的效果,它的使用是安装在画笔上使用的,也就是paint,通过改变目标的alpha的值来达到目的,它本身没什么用,要看它的两个子类BlurMaskFilter,EmbossMaskFilter,一个是让目标部分模糊不清,一个是让目标部分有凹凸的水印图案。
sdk的解释是使用它后会出现一个面具在目标的边缘的指定范围,该面具的边缘是否会被包进目标中,或者是在目标里边,外边,里边都有,这是由BlurMaskFilter.Blur这个枚举所决定的。
BlurMaskFilter.Blur有4个值
INNER:在目标内显示面具,从边缘向目标内到离边缘radius宽的地方显示,radius为初始化BlurMaskFilter的一个值
NORMAL:在目标内外显示面具,从边缘向目标内和目标外到离边缘radius宽的地方,向外显示面具时都会同时显示在目标边缘处获得的颜色。
OUTER:在目标外显示面具,从边缘向目标外到离边缘radius宽的地方,并且该部分会显示出从目标边缘获得的颜色,不显示目标
SOLID:在目标外显示面具,从边缘向目标外到离边缘radius宽的地方,并且该部分会显示出从目标边缘获得的颜色,显示目标
看初始化函数
BlurMaskFilter(float radius, BlurMaskFilter.Blur style),
两个变量,一个是显示时从边缘到离边缘多宽的值,一个是显示模式,简单应用如下
Bitmap b1=BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.a07);
BlurMaskFilter bmf=new BlurMaskFilter(30f,BlurMaskFilter.Blur.SOLID);
Paint paint=new Paint();
paint.setMaskFilter(bmf);
canvas.drawBitmap(b1, 30, 30, paint);
这是一个使用后会在目标上显示凹凸不平水印的面具。看初始化
direction包含3个值,x,y,z,用来指示光源照的方向。
ambient 范围0-1,表示光的强度系数
specular 表示镜子的高亮系数
blurRadius 在使用光之前的模糊不清的面具的宽度。
说实话这几个参数,除了最后一个参数很好明白是什么意思,干什么用的之外,其余3个都不好懂,怎么取值能得到什么样的效果也不好确定,不够直观。
简单看下应用:
float direction[]={1,1,1};
EmbossMaskFilter emf=new EmbossMaskFilter(direction,0.5f,8f,3f);
Paint paint=new Paint(Paint.DITHER_FLAG);
paint.setMaskFilter(emf);
paint.setColor(Color.RED);
canvas.drawRect(10, 10, 100, 30, paint);
看了半天也没怎么看明白,我想这两个类应该是配合paint用来做立体画的吧。
在apidemo里边有个fingerpaint里边简单的举了下例子怎么用这两个类,画出来的东西确实有立体感
使用MaskFilter类可以为Paint分配边缘效果。对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换。Android包含了下面几种MaskFilter:
BlurMaskFilter 指定了一个模糊的样式和半径来处理Paint的边缘。
EmbossMaskFilter 指定了光源的方向和环境光强度来添加浮雕效果。
要应用一个MaskFilter,可以使用setMaskFilter方法,并传递给它一个MaskFilter对象。下面的例子是对一个已经存在的Paint应用一个EmbossMaskFilter: