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