Android 4.0以上BlurMaskFilter效果无效

Android MaskFilter的基本使用:

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

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

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

 

1
2
3
4
5
6
7
8
9
10
// 设置光源的方向
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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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);
         }
     }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值