zoukankan      html  css  js  c++  java
  • 安卓开发之刮刮乐实例教程

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

    源码下载:点击下载

  • 相关阅读:
    spring多个数据源配置
    BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
    Codeforces Round #321 (Div. 2) E. Kefa and Watch 线段树hash
    Codeforces Round #321 (Div. 2) D. Kefa and Dishes 状压dp
    Codeforces Round #321 (Div. 2) C. Kefa and Park dfs
    Codeforces Round #321 (Div. 2) B. Kefa and Company 二分
    Codeforces Round #321 (Div. 2) A. Kefa and First Steps 水题
    Codeforces Round #268 (Div. 1) B. Two Sets 暴力
    Codeforces Round #268 (Div. 1) A. 24 Game 构造
    2015北京网络赛 F Couple Trees 暴力倍增
  • 原文地址:https://www.cnblogs.com/dongweiq/p/3962490.html
Copyright © 2011-2022 走看看