博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EmbossMaskFilter BlurMaskFilter 学习
阅读量:6463 次
发布时间:2019-06-23

本文共 3615 字,大约阅读时间需要 12 分钟。

 

MaskFilter类可以为Paint分配边缘效果。

对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换。Android包含了下面几种MaskFilter:

  1. BlurMaskFilter 指定了一个模糊的样式和半径来处理Paint的边缘,让目标部分模糊不清。
  2. EmbossMaskFilter 指定了光源的方向和环境光强度来添加浮雕效果,是让目标部分有凹凸的水印图案。

要应用一个MaskFilter,可以使用setMaskFilter方法,并传递给它一个MaskFilter对象

BlurMaskFilter.Blur 4个值:

  1. INNER:在目标内显示面具,从边缘向目标内到离边缘radius宽的地方显示,radius为初始化BlurMaskFilter的一个值
  2. NORMAL:在目标内外显示面具,从边缘向目标内和目标外到离边缘radius宽的地方,向外显示面具时都会同时显示在目标边缘处获得的颜色。
  3. OUTER:在目标外显示面具,从边缘向目标外到离边缘radius宽的地方,并且该部分会显示出从目标边缘获得的颜色,不显示目标
  4. SOLID:在目标外显示面具,从边缘向目标外到离边缘radius宽的地方,并且该部分会显示出从目标边缘获得的颜色,显示目标

BlurMaskFilter:

package com.soyoungboy.customview.widget;import android.annotation.TargetApi;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BlurMaskFilter;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.os.Build;import android.util.AttributeSet;import android.view.View;import com.example.customview.R;@TargetApi(Build.VERSION_CODES.HONEYCOMB)public class BlurMaskFilterView extends View {    private Paint mPaint;    private Bitmap mBitmap;    private Bitmap mAlphaBmp;    public BlurMaskFilterView(Context context, AttributeSet attrs,            int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    public BlurMaskFilterView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public BlurMaskFilterView(Context context) {        super(context);        init();    }    /**     * 进行初始化操作     */    private void init() {        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {            setLayerType(View.LAYER_TYPE_SOFTWARE, null);        }        mPaint = new Paint();        mBitmap = BitmapFactory.decodeResource(getResources(),                R.drawable.ic_launcher);        mAlphaBmp = mBitmap.extractAlpha();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 宽度        int width = 200;        // 高度        int height = width * mAlphaBmp.getHeight() / mAlphaBmp.getWidth();        // 绘制红色阴影,首先将画笔设置为红色        mPaint.setColor(Color.RED);        // 就是添加内外发光效果        mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));        // 绘制阴影在矩形框里面 左上角坐标 10,10,右下角坐标width,height        canvas.drawBitmap(mAlphaBmp, null, new Rect(10, 10, width, height),                mPaint);        // 绘制原图像        mPaint.setMaskFilter(null);        canvas.drawBitmap(mBitmap, null, new Rect(0, 0, width, height), mPaint);    }}

效果图:

mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.INNER));

效果图:

mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.OUTER));

效果图:

mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.SOLID));

 使用EmbossMaskFilter

修改onDraw()里面方法:

@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 宽度        int width = 200;        // 高度        int height = width * mAlphaBmp.getHeight() / mAlphaBmp.getWidth();      //设置光源的方向        float[] direction = new float[] { 1, 1, -1 };        // 设置环境光亮度        float light = 1f;        // 选择要应用的反射等级        float specular = 6;        // 向mask应用一定级别的模糊        float blur = 3.5f;        EmbossMaskFilter emboss = new EmbossMaskFilter(direction, light,                specular, blur);        mPaint.setMaskFilter(emboss);        mPaint.setColor(Color.BLUE);        // 绘制阴影在矩形框里面 左上角坐标 10,10,右下角坐标width,height        canvas.drawBitmap(mAlphaBmp, null, new Rect(10, 10, width, height),                mPaint);    }

效果图:

转载地址:http://saezo.baihongyu.com/

你可能感兴趣的文章
Samba日志分析
查看>>
【Android 基础】Android中全屏或者取消标题栏
查看>>
R语言学习笔记:分析学生的考试成绩
查看>>
uploadfy 常见问题收集
查看>>
[转]OllyDBG 入门系列(三)-函数参考
查看>>
EXTJS学习系列提高篇:第二十篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--批量删除篇...
查看>>
Gradle动态配置项目
查看>>
VUE2.0从零开始 学习路线
查看>>
Slog61_NodejsGUI之Electron模块的安装和测试
查看>>
phoneGap iOS插件开发(二)插件自动安装配置
查看>>
撩课大前端-面试宝典-第十五篇
查看>>
Kitty猫 vs. 百度狗,区块链动物大战,谁将下一个入局?
查看>>
程序员如何让自己 Be Cloud Native - 配置篇
查看>>
快速入门PyTorch(3)--训练一个图片分类器和多 GPUs 训练
查看>>
Python 深copy和浅copy
查看>>
Linux环境下的vim编译器的相关配置
查看>>
字符串及使用方法修改字符串的大小写
查看>>
安装sql 2008 r2(工作组下)
查看>>
【转】铁道部关于火车票电话订票、网络购票及预售期调整的最新通知(注释版)...
查看>>
Redis安装部署
查看>>