Android項目刮刮獎詳解擴充篇——開源刮刮獎View的製作

來源:互聯網
上載者:User

Android項目刮刮獎詳解(四)

前言

我們已經成功實現了刮刮獎的功能了,本期是擴充篇,我們把這個View直接定義成開原始檔控制,發布到JitPack上,以後有需要也可以直接使用,關於自訂控制項的知識,不瞭解的同學可以看這下面我之前寫的這兩篇

Android 自訂控制項

Android開發——發布第三方庫到JitPack上

實現
  1. 定義屬性
    • text 文字內容
    • textColor 文字顏色
    • textSize 文字大小
    • paintSize 擦除效果的寬度
    • messageBackground 中獎圖片
    • cover 遮蓋層圖片或遮蓋層顏色
    • isDrawText 顯示文字或者是圖片,預設顯示文字
    • clearFlag 達到多少閾值清除遮蓋層,預設60

    按照之前那一篇自訂控制項來操作,我們建立個atts.xml,在其中定義屬性,這裡,我們可以將中獎圖片和資訊層顏色合為一項,遮蓋層圖片和遮蓋層顏色合為一項

     <?xml version="1.0" encoding="utf-8"?> <resources>     <declare-styleable name="GuaJiangView">         <attr name="text" format="string"/>         <attr name="textColor" format="color"/>         <attr name="textSize" format="integer"/>         <attr name="messageBackground" format="color|reference"/>         <attr name="cover" format="color|reference"/>         <attr name="PaintSize" format="integer"/>         <attr name="isDrawText" format="boolean"/>         <attr name="clearFlag" format="integer"/>     </declare-styleable> </resources>
  2. 獲得我們定義的屬性

     TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.GuaJiangView); text = ta.getString(R.styleable.GuaJiangView_text); textColor = ta.getColor(R.styleable.GuaJiangView_textColor,0); textSize = ta.getInteger(R.styleable.GuaJiangView_textSize,16); coverDrawable = ta.getDrawable(R.styleable.GuaJiangView_cover); isDrawText = ta.getBoolean(R.styleable.GuaJiangView_isDrawText,true); clearFlag = ta.getInteger(R.styleable.GuaJiangView_clearFlag,60); if (!isDrawText){     backgroundDrawable = ta.getDrawable(R.styleable.GuaJiangView_messageBackground); } paintSize = ta.getInteger(R.styleable.GuaJiangView_PaintSize,10); ta.recycle();
    這裡加了個判斷,當使用者選擇唯寫中獎資訊,我們可以屏蔽掉擷取資訊層的圖片設定,防止出錯
  3. 修改之前的項目代碼

    開源庫,自然是不能像之前項目那般寫的那麼淩亂,自然是得寫上厚厚的注釋,將代碼重構最佳化一下,還得考慮到相關的邏輯

    這裡提一下,attrs中可以使用\|來使該屬性接收兩個屬性,最常用的還是背景顏色和背景圖片合成一項,例如上面定義的attr中的背景

     <attr name="messageBackground" format="color|reference"/>

    我們可以通過下面的方法來對這樣的屬性使用,獲得之後轉換為bitmap

     /**  * drawable轉換為bitmap  * @param drawable 需要轉換的drawble  * @param width 寬  * @param height 高  * @return 返回bitmap */ public Bitmap drawableToBitmap(Drawable drawable, int width, int height) {     if (drawable instanceof BitmapDrawable) {         return ((BitmapDrawable) drawable).getBitmap();     }     Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);     Canvas canvas = new Canvas(bitmap);     drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());     drawable.draw(canvas);     return bitmap; }

    其實drawable 它本身有一個 draw方法, 只要我們調用setBounds設定範圍, 在調用draw方法就可以直接畫了,上面的drawable其實已經包含有顏色了,所以我們直接調用draw方法即可在畫出一個純顏色的bitmap

    簡單地觀察,這裡與會之前的mCanvas是一樣的。

    以建立的bitmap作為畫板,之後drawable在canvas上作畫(實際上是畫在了bitmap),之後我們返回這個bitmap使用即可

    其他地與之前差不多,大家自己琢磨琢磨吧,最後我會發出完整代碼的

  4. 上傳github以及JitPack

    這裡將不多說什麼了,我這兩篇寫的很清楚了
    • Git的簡單使用
    • Android開發——發布第三方庫到JitPack上
  5. 簡單的測試使用

GuaJiangViewDemo
我們按照文檔上的方法,匯入依賴,使用即可

番外——做個美女脫衣

本來想單獨出來寫一篇的,不過,發現也沒有什麼新的代碼要寫,我們直接拿開源庫來用即可(需要美女穿衣和脫衣的衣服哦~)

我就準備了二次元少女的衣服,將兩張圖片放到drawable檔案夾之中,我們就可以開始工作了

弄好之後,我的android Studio竟然卡死了?!

什麼鬼!!好在重啟一下軟體就好了

激動時刻————

哈哈,成功,刮刮卡項目的詳解就到此結束啦~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.