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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM