安卓开发之刮刮乐实例教程

刮奖在生活中常常见到,网上现在也有各种各样的抽奖活动,下面我们就要实现一个刮刮乐程序,可以完美满足 大家的虚荣心,哈哈,下面就开始吧,100%中奖的喔!

下面先来看看效果图:

08_guaguale

08_guaguale2

08_guaguale3

让我们来看看它的布局:

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

源码下载:点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值