Android項目刮刮獎詳解(四)
前言
我們已經成功實現了刮刮獎的功能了,本期是擴充篇,我們把這個View直接定義成開原始檔控制,發布到JitPack上,以後有需要也可以直接使用,關於自訂控制項的知識,不瞭解的同學可以看這下面我之前寫的這兩篇
Android 自訂控制項
Android開發——發布第三方庫到JitPack上
實現
- 定義屬性
- 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>
獲得我們定義的屬性
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();
這裡加了個判斷,當使用者選擇唯寫中獎資訊,我們可以屏蔽掉擷取資訊層的圖片設定,防止出錯
修改之前的項目代碼
開源庫,自然是不能像之前項目那般寫的那麼淩亂,自然是得寫上厚厚的注釋,將代碼重構最佳化一下,還得考慮到相關的邏輯
這裡提一下,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使用即可
其他地與之前差不多,大家自己琢磨琢磨吧,最後我會發出完整代碼的
上傳github以及JitPack
這裡將不多說什麼了,我這兩篇寫的很清楚了
- Git的簡單使用
- Android開發——發布第三方庫到JitPack上
簡單的測試使用
GuaJiangViewDemo
我們按照文檔上的方法,匯入依賴,使用即可
番外——做個美女脫衣
本來想單獨出來寫一篇的,不過,發現也沒有什麼新的代碼要寫,我們直接拿開源庫來用即可(需要美女穿衣和脫衣的衣服哦~)
我就準備了二次元少女的衣服,將兩張圖片放到drawable檔案夾之中,我們就可以開始工作了
弄好之後,我的android Studio竟然卡死了?!
什麼鬼!!好在重啟一下軟體就好了
激動時刻————
哈哈,成功,刮刮卡項目的詳解就到此結束啦~