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








  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/fuccc/p/6379507.html
Copyright © 2011-2022 走看看