zoukankan      html  css  js  c++  java
  • 学习笔记——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);








  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/fuccc/p/6379507.html
Copyright © 2011-2022 走看看