您的位置:首页 > 移动开发 > Android开发

Android 使用MaskFilter为Paint设置效果

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


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. // 设置光源的方向

2. float[] direction = new float[]{ 1, 1, 1 };


3. //设置环境光亮度

4. float light = 0.4f;


5. // 选择要应用的反射等级

6. float specular = 6;


7. // 向mask应用一定级别的模糊

8. float blur = 3.5f;


9. EmbossMaskFilter emboss=new EmbossMaskFilter(direction,light,specular,blur);


10.


11. // 应用mask

12. myPaint.setMaskFilter(emboss);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: