美文网首页
智能终端软件开发——刮刮卡

智能终端软件开发——刮刮卡

作者: itczt | 来源:发表于2019-06-12 17:39 被阅读0次

    日常生活,抽奖是大多数人都喜欢的一项活动。抽奖的形式有很多种,例如彩票、刮刮卡等。Android系统也可以实现刮刮卡的效果,需要用到Bitmap、Matrix、Canvas等类。接下来通过一个案列来演示刮刮卡的实现过程,具体如下。

    1.创建程序

    创建一个名为ScrCard的应用程序,指定包名为cn.itcast.scratchcard,设计用户交互界面,预览效果如图。


    对应的布局代码如下:
    activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
    <ImageView
        android:id="@+id/bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
    
        />
    
        <ImageView
            android:id="@+id/imgvv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/scratch_card"
            />
    </RelativeLayout>
    

    在上述代码中,RelativeLayout布局中添加了两个ImageView,分别用于遮挡中奖信息和显示奖结果。

    2.编写界面交互代码

    接下来在MainActivity中编写交互代码,具体代码如下。
    MainActivity。java

    package com.czt.scratchcard;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.ImageView;
    
    public class MainActivity extends AppCompatActivity {
        private ImageView imageView;
        private Bitmap alterBitmap;
        private double nX,nY;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            imageView = (ImageView)findViewById(R.id.imgvv);
            //从资源中解析一张Bitmap
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.scratch_card);
            alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            nX = (double)bitmap.getWidth()/dm.widthPixels;
            nY = (double)bitmap.getHeight()/dm.heightPixels;
            //创建一个Canvas对象
            Canvas canvas = new Canvas(alterBitmap);
            //创建画笔对象
            Paint paint = new Paint();
            //为画笔设置颜色
            paint.setColor(Color.BLACK);
            paint.setAntiAlias(true);
            //创建Marix对象
            Matrix matrix = new Matrix();
            //在alterbitmap上画图
            canvas.drawBitmap(bitmap,matrix,paint);
            //为ImageVie设置触摸监听
            imageView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    try {
                        int x = (int)event.getX();
                        int y = (int)event.getY();
                        for (int i = -100;i<100;i++)
                        {
                            for (int j = -100;j<100;j++)
                            {
                                //将区域类的像书店设为透明像素
                                if (Math.sqrt((i*i)+(j*j))<=100)
                                {
                                    alterBitmap.setPixel((int)(x*nX)+i,(int)(y*nY+90)+j,Color.TRANSPARENT);
                                }
                            }
                        }
                        imageView.setImageBitmap(alterBitmap);
    
                    }catch (Exception e){
                        //try...catch捕获异常,防止用户触摸图片以为的地方而异常退出
                        e.printStackTrace();
                    }
                    //销毁该触摸事件
                    return true;
                }
            });
        }
    }
    
    

    在上述代码中,用到了ImageView的触摸监听事件OnTouchListener()方法,当手指触碰到该ImageView时,会调用其中的setPixel(int x,int y,@Colorint int color)方法绘制图像,其中有3个参数,参数x、yf分别获取x、y的坐标值,参数color是设置绘图图像的颜色(本案例设置为透明色)。

    3.运行程序

    运行刮刮卡程序,并用手刮开卡片,运行结果如下:


    运行结果

    有运行结果可以看出,当手指触摸并在刮刮卡片上移动时,手指所到之处像素会变透明,从而显示出ImageView下面的中奖信息。

    相关文章

      网友评论

          本文标题:智能终端软件开发——刮刮卡

          本文链接:https://www.haomeiwen.com/subject/qnbkfctx.html