首页 > 代码库 > Android 4.0以上BlurMaskFilter效果无效

Android 4.0以上BlurMaskFilter效果无效

Android MaskFilter的基本使用:

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

        BlurMaskFilter   指定了一个模糊的样式和半径来处理Paint的边缘。
        EmbossMaskFilter  指定了光源的方向和环境光强度来添加浮雕效果。

        要应用一个MaskFilter,可以使用setMaskFilter方法,并传递给它一个MaskFilter对象。下面的例子是对一个已经存在的Paint应用一个EmbossMaskFilter:

 

// 设置光源的方向 float[] direction = new float[]{ 1, 1, 1 }; //设置环境光亮度 float light = 0.4f; // 选择要应用的反射等级 float specular = 6; // 向mask应用一定级别的模糊 float blur = 3.5f; EmbossMaskFilter emboss=new EmbossMaskFilter(direction,light,specular,blur); // 应用mask myPaint.setMaskFilter(emboss); 

 

   SDK中包含的FingerPaint API demo是说明如何使用MaskFilter的一个非常好的例子。它展示了这两种filter的效果。

 

但是:

 

  在Manifest.xml的

  <uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="14" />

  targetSdkVersion设置为14或者以上的时候,BlurMaskFilter就不会起作用了!

 

图一 targetSdkVersion="8"                                                                              图二targetSdkVersion="14"

 

            

 

Demo代码:

package com.example.test;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BlurMaskFilter;import android.graphics.BlurMaskFilter.Blur;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.graphics.Rect;import android.graphics.RectF;import android.os.Bundle;import android.view.View;public class Canvas2Activity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(new CanvasView(this));	}	class CanvasView extends View{		Paint paint = null;		Rect rect1 = null;		Rect rect2 = null;		Path path2 = null;		public CanvasView(Context context) {			super(context);			paint = new Paint();			paint.setFlags(Paint.ANTI_ALIAS_FLAG);			paint.setAntiAlias(true);			paint.setColor(Color.RED);			paint.setTextSize(20);			paint.setStyle(Style.FILL_AND_STROKE);			paint.setStrokeWidth(3);			paint.setSubpixelText(true);						BlurMaskFilter bmf = new BlurMaskFilter(50, Blur.SOLID);			paint.setMaskFilter(bmf);			rect2 = new Rect(300, 0, 500, 200);			path2 = new Path();			path2.moveTo(200, 200);			path2.quadTo(200, 200, 300, 400);			path2.lineTo(500, 500);			path2.close();		}		@SuppressLint("DrawAllocation")		@Override		protected void onDraw(Canvas canvas) {			// 绘制颜色			canvas.drawARGB(0x7F, 0x33, 0x66, 0x99);			canvas.drawRect(rect2, paint);			canvas.drawPath(path2, paint);			super.onDraw(canvas);		}	}}