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


    刮奖在生活中常常见到,网上现在也有各种各样的抽奖活动,下面我们就要实现一个刮刮乐程序,可以完美满足 大家的虚荣心,哈哈,下面就开始吧,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, 00null);
         mCanvas.drawPath(path, paint);
         super.onDraw(canvas);
    }

    源码下载:点击下载

  • 相关阅读:
    程序员有哪些发展方向
    Mysql Join语法解析与性能分析
    jQuery过滤性选择器
    jQuery 基础选择器
    CSS布局模型
    CSS 盒子模型
    CSS 的继承、层叠和特殊性
    java 集合框架(一)
    从客户端中检测到有潜在危险的 Request.Form 值
    线程的一些问题
  • 原文地址:https://www.cnblogs.com/dongweiq/p/3962490.html
Copyright © 2020-2023  润新知