首页 > 代码库 > 学习笔记——Paint 1(MaskFilter)

学习笔记——Paint 1(MaskFilter)

对于Paint没有很好的深入的学习过,在工作之余再巩固巩固。

1.Paint的BlurMaskFilter(模糊效果)

自定义一个View继承View 重写里面的onDraw方法。这里直接上代码了:

@Override
protected void onDraw(Canvas canvas) {
BlurMaskFilter bmf = null;
Paint paint = new Paint();
paint.setAntiAlias(true); //抗锯齿
paint.setColor(Color.RED); //画笔颜色
paint.setStyle(Paint.Style.FILL); //画笔风格
paint.setTextSize(68); //绘制的文字大小
paint.setStrokeWidth(5); //画笔粗细

bmf=new BlurMaskFilter(10f,BlurMaskFilter.Blur.NORMAL);
paint.setMaskFilter(bmf);
canvas.drawText("最喜欢兰了",100,100,paint);

bmf=new BlurMaskFilter(10f,BlurMaskFilter.Blur.OUTER);
paint.setMaskFilter(bmf);
canvas.drawText("最喜欢兰了",100,200,paint);

bmf=new BlurMaskFilter(10f,BlurMaskFilter.Blur.INNER);
paint.setMaskFilter(bmf);
canvas.drawText("最喜欢兰了",100,300,paint);

bmf=new BlurMaskFilter(10f,BlurMaskFilter.Blur.SOLID);
paint.setMaskFilter(bmf);
canvas.drawText("最喜欢兰了",100,400,paint);

setLayerType(View.LAYER_TYPE_SOFTWARE,null);
}


这里模糊设置主要靠 bmf=new BlurMaskFilter(10f,BlurMaskFilter.Blur.SOLID);其中两个参数,
第一个参数:指模糊边缘的半径
第二个参数:指模糊的类型 有4种值,详细如下:
BlurMaskFilter.Blur.NORMAL :内外模糊
BlurMaskFilter.Blur.OUTER :外部模糊
BlurMaskFilter.Blur.INNER :内部模糊
BlurMaskFilter.Blur.SOLID :内部加粗,外部模糊

效果图如下:

技术分享


2.EmbossMaskFilter(浮雕效果)

使用方式与BlurMaskFilter相同,主要部分在于其构造方法。
代码如下:
float[] direction = {1, 1, 3}; //设置光源方向
float light=0.4f; //设置环境光亮度
float specular=8; //设置镜面反射系数
float blur=3.0f; //模糊半径
EmbossMaskFilter emboss = new EmbossMaskFilter(direction, light, specular, blur);

Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.FILL);
paint.setTextSize(70);
paint.setStrokeWidth(8);
paint.setMaskFilter(emboss);

paint.setMaskFilter(emboss);
canvas.drawText("最喜欢兰了!!",50,100,paint);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
canvas.drawBitmap(bitmap,150,200,paint);

setLayerType(View.LAYER_TYPE_SOFTWARE,null); //关闭硬件加速


构造方法为:EmbossMaskFilter emboss = new EmbossMaskFilter(direction, light, specular, blur);
其中4个参数:
第一个参数:direction 代表光源的方向,一个float类型的集合 用于控制x,y,z的光源方向
第二个参数:light 表示环境光亮度,0到1之间
第三个参数:specular 定义的镜面反射系数
第四个参数:blur 模糊半径

注意事项:
使用MaskFilter时注意,当targetSDKVersion>=14的时候,MaskFilter就不会起效果了。Android在API14以上版本默认开启硬件加速。
一般的关闭方法。
Application :在配置文件的application节点添加:android:hardwareAccelerated=‘true’
Activity:在配置文件的activity节点添加android:hardwareAccelerated=‘false’
View:获取View对象调用或者直接在onDraw方法里设置 view.setLayerType(View.LAYER_TYPE_HARDWARE,null);








学习笔记——Paint 1(MaskFilter)