智能終端軟件開發(fā)——刮刮卡

日常生活毙芜,抽獎是大多數(shù)人都喜歡的一項活動。抽獎的形式有很多種争拐,例如彩票腋粥、刮刮卡等。Android系統(tǒng)也可以實現(xiàn)刮刮卡的效果架曹,需要用到Bitmap隘冲、Matrix、Canvas等類绑雄。接下來通過一個案列來演示刮刮卡的實現(xiàn)過程展辞,具體如下。

1.創(chuàng)建程序

創(chuàng)建一個名為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覆旱,分別用于遮擋中獎信息和顯示獎結(jié)果。

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;
        //創(chuàng)建一個Canvas對象
        Canvas canvas = new Canvas(alterBitmap);
        //創(chuàng)建畫筆對象
        Paint paint = new Paint();
        //為畫筆設置顏色
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
        //創(chuàng)建Marix對象
        Matrix matrix = new Matrix();
        //在alterbitmap上畫圖
        canvas.drawBitmap(bitmap,matrix,paint);
        //為ImageVie設置觸摸監(jiān)聽
        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++)
                        {
                            //將區(qū)域類的像書店設為透明像素
                            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的觸摸監(jiān)聽事件OnTouchListener()方法,當手指觸碰到該ImageView時已慢,會調(diào)用其中的setPixel(int x曲聂,int y,@Colorint int color)方法繪制圖像,其中有3個參數(shù)佑惠,參數(shù)x朋腋、yf分別獲取x、y的坐標值膜楷,參數(shù)color是設置繪圖圖像的顏色(本案例設置為透明色)旭咽。

3.運行程序

運行刮刮卡程序,并用手刮開卡片赌厅,運行結(jié)果如下:


運行結(jié)果

有運行結(jié)果可以看出穷绵,當手指觸摸并在刮刮卡片上移動時,手指所到之處像素會變透明特愿,從而顯示出ImageView下面的中獎信息仲墨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勾缭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子目养,更是在濱河造成了極大的恐慌俩由,老刑警劉巖冷溶,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件红碑,死亡現(xiàn)場離奇詭異,居然都是意外死亡呈驶,警方通過查閱死者的電腦和手機匈勋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門礼旅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洽洁,你說我怎么就攤上這事痘系。” “怎么了饿自?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵汰翠,是天一觀的道長。 經(jīng)常有香客問我昭雌,道長复唤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任烛卧,我火速辦了婚禮佛纫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘总放。我一直安慰自己呈宇,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布局雄。 她就那樣靜靜地躺著甥啄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炬搭。 梳的紋絲不亂的頭發(fā)上蜈漓,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音宫盔,去河邊找鬼融虽。 笑死,一個胖子當著我的面吹牛灼芭,可吹牛的內(nèi)容都是我干的有额。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谆吴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苛预,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤句狼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后热某,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腻菇,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年昔馋,在試婚紗的時候發(fā)現(xiàn)自己被綠了筹吐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秘遏,死狀恐怖丘薛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邦危,我是刑警寧澤洋侨,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站倦蚪,受9級特大地震影響希坚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陵且,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一裁僧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慕购,春花似錦聊疲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至可训,卻和暖如春昌妹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背握截。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工飞崖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谨胞。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓固歪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牢裳,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,097評論 1 32
  • #Android 基礎知識點總結(jié) ---------- ##1.adb - android debug bridg...
    Mythqian閱讀 3,281評論 2 11
  • 1.下列哪些語句關于內(nèi)存回收的說明是正確的? (b )A蒲讯、 程序員必須創(chuàng)建一個線程來釋放內(nèi)存B忘朝、內(nèi)存回收程序負責釋...
    悠悠我心_4a00閱讀 555評論 0 2
  • 題目/兔奶奶的十個森林幣 文/將晚的天 森林里有一片花的海洋。 兔奶奶年輕的時候環(huán)游世界判帮,收集來了各種鮮花的種子局嘁,...
    將晚的天閱讀 1,615評論 11 38
  • 每晚的這個點我與你們不期而遇,晦墙,不早不晚悦昵,耶今天有提前,晌畅,昨天因為有顧客的訂貨忙做酸面包整個腦袋瓜里裝的滿滿疑問但指,...
    如風一般的女子閱讀 198評論 0 0