刮奖在生活中常常见到,网上现在也有各种各样的抽奖活动,下面我们就要实现一个刮刮乐程序,可以完美满足 大家的虚荣心,哈哈,下面就开始吧,100%中奖的喔!
下面先来看看效果图:
让我们来看看它的布局:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<
RelativeLayout
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
>
<
TextView
android:id
=
"@+id/textView1"
android:layout_width
=
"300dp"
android:layout_height
=
"150dp"
android:layout_centerHorizontal
=
"true"
android:layout_centerVertical
=
"true"
android:background
=
"@android:color/holo_red_dark"
android:gravity
=
"center"
android:text
=
"恭喜你,中奖啦!"
android:textSize
=
"35dp"
/>
<
net.androidchina.example.guale.EraseView
android:id
=
"@+id/eraseView1"
android:layout_width
=
"300dp"
android:layout_height
=
"150dp"
android:layout_centerHorizontal
=
"true"
android:layout_centerInParent
=
"true"
android:layout_centerVertical
=
"true"
/>
</
RelativeLayout
>
|
布局很简单,通过相对布局,将文字和view重叠到一起,重点是EraseView这个类的实现,下面一起看看这个类的代码:
首先我们要定义一个画布以及画笔
1
2
3
4
5
6
7
8
9
10
|
paint =
new
Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setXfermode(
new
PorterDuffXfermode(Mode.CLEAR));
paint.setAntiAlias(
true
);
paint.setDither(
true
);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(
30
);
mCanvas =
new
Canvas(bitmap);
|
当手指触摸屏幕时,需要触发滑动事件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@Override
public
boolean
onTouchEvent(MotionEvent event) {
float
ax = event.getX();
float
ay = event.getY();
if
(event.getAction() == MotionEvent.ACTION_DOWN) {
isMove =
false
;
path.reset();
path.moveTo(ax, ay);
invalidate();
return
true
;
}
else
if
(event.getAction() == MotionEvent.ACTION_MOVE) {
isMove =
true
;
path.lineTo(ax, ay);
invalidate();
return
true
;
}
return
super
.onTouchEvent(event);
}
|
这里需要一个path来记录轨迹,并且需要调用invalidate();来对画布进行重画,会进一步调用onDraw方法:
1
2
3
4
5
6
7
8
9
10
|
@Override
protected
void
onDraw(Canvas canvas) {
if
(mCanvas ==
null
) {
EraseBitmp();
}
canvas.drawBitmap(bitmap,
0
,
0
,
null
);
mCanvas.drawPath(path, paint);
super
.onDraw(canvas);
}
|
源码下载:点击下载