EmbossMaskFilter BlurMaskFilter 学习

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

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

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

BlurMaskFilter.Blur 4个值:

INNER:在目标内显示面具,从边缘向目标内到离边缘radius宽的地方显示,radius为初始化BlurMaskFilter的一个值
NORMAL:在目标内外显示面具,从边缘向目标内和目标外到离边缘radius宽的地方,向外显示面具时都会同时显示在目标边缘处获得的颜色。
OUTER:在目标外显示面具,从边缘向目标外到离边缘radius宽的地方,并且该部分会显示出从目标边缘获得的颜色,不显示目标
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;

@TargetApiBuild.VERSION_CODES.HONEYCOMB)
public class BlurMaskFilterView extends View {

    private Paint mPaint;
    private Bitmap mBitmap;
    private Bitmap mAlphaBmp;

    public BlurMaskFilterViewContext context, AttributeSet attrs,
            int defStyleAttr) {
        supercontext, attrs, defStyleAttr);
        init);
    }

    public BlurMaskFilterViewContext context, AttributeSet attrs) {
        supercontext, attrs);
        init);
    }

    public BlurMaskFilterViewContext context) {
        supercontext);
        init);
    }

    /**
     * 进行初始化操作
     */
    private void init) {
        if android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
            setLayerTypeView.LAYER_TYPE_SOFTWARE, null);
        }
        mPaint = new Paint);
        mBitmap = BitmapFactory.decodeResourcegetResources),
                R.drawable.ic_launcher);
        mAlphaBmp = mBitmap.extractAlpha);

    }

    @Override
    protected void onDrawCanvas canvas) {
        super.onDrawcanvas);
        // 宽度
        int width = 200;
        // 高度
        int height = width * mAlphaBmp.getHeight) / mAlphaBmp.getWidth);

        // 绘制红色阴影,首先将画笔设置为红色
        mPaint.setColorColor.RED);
        // 就是添加内外发光效果
        mPaint.setMaskFilternew BlurMaskFilter10, BlurMaskFilter.Blur.NORMAL));
        // 绘制阴影在矩形框里面 左上角坐标 10,10,右下角坐标width,height
        canvas.drawBitmapmAlphaBmp, null, new Rect10, 10, width, height),
                mPaint);

        // 绘制原图像
        mPaint.setMaskFilternull);
        canvas.drawBitmapmBitmap, null, new Rect0, 0, width, height), mPaint);

    }

}

效果图:

mPaint.setMaskFilternew BlurMaskFilter10, BlurMaskFilter.Blur.INNER));

效果图:

mPaint.setMaskFilternew BlurMaskFilter10, BlurMaskFilter.Blur.OUTER));

效果图:

mPaint.setMaskFilternew BlurMaskFilter10, BlurMaskFilter.Blur.SOLID));

 使用EmbossMaskFilter

修改onDraw)里面方法:

@Override
    protected void onDrawCanvas canvas) {
        super.onDrawcanvas);
        // 宽度
        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 EmbossMaskFilterdirection, light, specular, blur); mPaint.setMaskFilteremboss); mPaint.setColorColor.BLUE); // 绘制阴影在矩形框里面 左上角坐标 10,10,右下角坐标width,height canvas.drawBitmapmAlphaBmp, null, new Rect10, 10, width, height), mPaint); }

效果图:

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注