Android 使用MaskFilter为Paint设置效果

MaskFilter我们不妨把它叫做面具,就是给所要画的东西套上一个面具,让你的要画的东西达到你想要的效果,它的使用是安装在画笔上使用的,也就是paint,通过改变目标的alpha的值来达到目的,它本身没什么用,要看它的两个子类BlurMaskFilter,EmbossMaskFilter,一个是让目标部分模糊不清,一个是让目标部分有凹凸的水印图案。

BlurMaskFilter

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);

EmbossMaskFilter

这是一个使用后会在目标上显示凹凸不平水印的面具。看初始化

public EmbossMaskFilter (float[] direction, float ambient, float specular, float blurRadius)

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:

Java代码  复制代码 
  1.  1// 设置光源的方向     
  2.  2float[] direction = new float[]{ 111 };     
  3.  3//设置环境光亮度     
  4.  4float light = 0.4f;     
  5.  5// 选择要应用的反射等级     
  6.  6float specular = 6;     
  7.  7// 向mask应用一定级别的模糊     
  8.  8float blur = 3.5f;     
  9.  9. EmbossMaskFilter emboss=new EmbossMaskFilter(direction,light,specular,blur);     
  10. 10.     
  11. 11// 应用mask     
  12. 12. myPaint.setMaskFilter(emboss);   

你可能感兴趣的:(Android开发,android,绘图)