閱讀214 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android仿淘寶刮刮卡功能實現

去年淘寶和天貓的活動搞的有聲有色的,其中有一個遊戲還是很受大家歡迎的,那就是紅包刮刮卡,自己也挺迷的,一刮起來就停不下來,有沒有?

最近自己也在學習android入門,正好前些日子在搜索一個功能示例的時候,找到一個哥們分享的一篇介紹刮刮卡的文章,文章很簡單,基本沒有廢話,直接貼了如何通過自定義view來實現刮刮卡的示例代碼,鏈接如下:

https://www.cnblogs.com/xinye/p/3616095.html

 

後來又借著給大家分享android開發入門知識的機會,以這個示例為主要功能參考,並主要仿照天貓紅包刮刮卡的外觀樣式和交互功能,做了一個還算功能齊全的示例,因為主要是為了講解,所以特意把注釋標注的比較完整,大家可以通過下麵的鏈接到我共享的列表中下載示例源碼:

https://github.com/yangguilin/GuaGuaLe

 

下麵簡單分析一下,實現刮刮卡功能的幾點關鍵知識點:

1. 自定義一個View子類(TextView當然也可以,俺就是用得TextView做父類),並且重寫下麵幾個主要方法:

(1) 構造函數

(2)視圖繪製方法:protected void onDraw(Canvas canvas)

(3) 觸屏事件處理方法:public boolean onTouchEvent(MotionEvent event)

 

2. 第一步中的三個方法是主要且必須的三個方法,接下來,在構造函數中,需要添加初始化刮刮卡視圖的功能,該功能可以分解為以下幾個關鍵步驟:

(1) 設置視圖背景圖片:因為涉及到隨機變換的是否中獎的圖片,所以意味著這個背景需要通過canvas來操作bitmap來做一次簡單的繪製,首先為bitmap設置一種背景色,然後再通過canvas將得到的,需要顯示的圖片,根據具體的尺寸比例,畫到bitmap中即可。

(2) 視圖背景搞定後,接下來要搞定的就是刮刮卡的塗層,也就是咱們能用手指劃掉的那一層,原理基本類似於背景,首先創建一個topBitmap,然後將該topBitmap載入到一個Canvas中進行編輯,為該topBitmap添加一層灰色的背景色,然後再通過定義一個畫筆,再在該topBitmap上繪製上提示文字“請刮開塗層”,這樣刮刮卡的所謂上下兩層均已經定義完畢。

(3) 接下來,需要定義一隻手指劃到塗層時,來繪製透明色的畫筆,其工作原理主要就是,通過調用默認的觸屏事件 + 視圖自動繪製,來實現所謂的手指刮開塗層的操作。(這部分也是不太容易理解的,或許是我說不清楚,總之看代碼注釋吧,會比較清楚)

(4) 此外,如何實現當手指劃開大部分背景圖片時,自動去除全部塗層,說來也挺簡單,不排除有更完美的處理方案,俺用的是關鍵點法,即定義若幹(示例中定義了9個)關鍵點,分布於待顯示的背景圖的主要區域,然後在每一次判斷手指滑動的事件的同時,順便檢查是否有大多數的關鍵點的顏色值已經變為了透明(顏色值為0,即已被刮開),如果是,則通過canvas直接將topBitmap的顏色統一設置為透明色即可。

(5) 針對不同尺寸的android手機,如何做到顯示一致?這也是一個後期的主要問題,因為前期通過不斷調試,設定的一些尺寸,都是基於調試機的,既然要在各種不同版本、品牌的機器上運行,那麼適配就是一個主要的問題,我是用了一種比較偷懶的方法,及將調試機的各項參數數據作為默認的參數,然後每次初始化的時候,都會獲取當前屏幕的分辨率尺寸,然後與默認值的屏幕寬度進行比較,得到一個比例,然後在所有需要明確使用數值的地方,都乘以該比例,間接地達到了對試圖縮放的目的。

 

最後,附上兩張示例的截圖:

Screenshot_2014-04-02-19-21-22    Screenshot_2014-04-02-19-21-43

 

Screenshot_2014-04-02-19-22-16     Screenshot_2014-04-02-19-21-51

最後更新:2017-04-01 13:37:10

  上一篇:go 【筆談】Github上新鮮出爐的深度學習係統mxnet的中文介紹
  下一篇:go 深入淺出空間索引:為什麼需要空間索引