又見面啦!歡迎來到安卓開發技巧系列的第三篇博文。
我們很高興至今為止很多人已經發現了這個系列的有趣之處,很感謝你們通過評論和電子郵件的方式向我們表達你們的支援!
說給第一次來這裡的朋友吧,很久以前我們(安卓團隊)就已經在內部互相分享每週學習到的小技巧了。
最近,我們開始在部落格上與其餘的開發團隊分享我們的小技巧。
可能最近某個星期我們將分享最早的幾篇小技巧文章來博君一笑!好吧,言歸正傳,下面就是這周的小技巧。
技巧 1
如果你正在使用 ZXing 庫中的 QRCodeWriter 來生成 qr 碼,那麼(用這種方法)生成大尺寸影像是相當慢的。實際上,你可以傳遞一個 0x0 的尺寸,這時將返回一個儘可能最小尺寸(每塊是1畫素)的 BitMatrix。
然後你可以把這個 matrix 寫進 BitmapDrawable,並將其設定為某些檢視的背景。
不過,你需要首先確保在 drawable 中呼叫了
1 |
setFilterBitmap(false) |
,這樣(影像)在縮放時不會變得模糊。
1 2 3 4 5 6 7 8 9 10 11 12 |
BitMatrix matrix = new QRCodeWriter().encode("content here", BarcodeFormat.QR_CODE, 0, 0); int height = matrix.getHeight(); int width = matrix.getWidth(); Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444); for (int x = 0; x < width; x++) { for (int y = 0; y < width; y++) { bmp.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.TRANSPARENT); } } BitmapDrawable qrCodeDrawable = new BitmapDrawable(getResources(), bmp); qrCodeDrawable.setFilterBitmap(false); imgQrCode.setBackground(qrCodeDrawable); |
我使用 Bitmap.Config.ARGB_4444,因為我需要將 QR 碼的背景設定成透明。如果你希望是黑白色的,可以使用 Bitmap.Config.RGB_565。
同時,如果你希望操作安全,你可以改變 QR 碼的建立方式為
1 |
BitMatrix matrix = new QRCodeWriter().encode("content here",BarcodeFormat.QR_CODE, 10, 10) |
以防類庫在未來不再接收 0x0 的尺寸,因為我相信一個 QR 碼不可能小於1.0×1.0。
– 技巧貢獻者, James Sun
技巧 2
下次你需要使用“adb shell”時可以鍵入“adb hell”試試。相信我。
– 技巧貢獻者, Tyler Romeo
技巧 3
1 |
TextUtils.concat() |
將會返回給你一個連線輸入字串的字元序列,並且保留了它們之間的間距。
– 技巧貢獻者, Walker Hannan
技巧 4
“葉子”檢視在觸控事件中享有優先權,但是“根”檢視在攔截觸控事件時享有優先權,所以當你需要的是有子檢視正在使用的觸控事件時,換成攔截事件吧。
同時,如果這個子檢視正在呼叫
1 |
setRequestDisallowInterceptTouchEvent |
但是你並不希望它起作用,那麼除了覆蓋它不要做任何事。
– 技巧貢獻者, Frank Doyle
技巧 5
你可以使用 SqliteDatabase 的 beginTransaction() 和 endTransaction() 來完成批量操作,但是你必須確保呼叫了
1 |
setTransactionSuccessful() |
,否則一旦呼叫endTransaction(),你所做的改變將會回滾。
– 技巧貢獻者, Walker Hannan
技巧 6
如果你正在做測試,你可能應該謹慎使用靜態方法!為什麼?在眾多其他理由中,較恰當的一個理由是安卓框架提供的方法不能在測試中使用,因為他們是靜態方法所以你不能將它們模擬出來。
– 技巧貢獻者, Frank Doyle
技巧 7
如果你正在做測試,你應該試試 Mockito。它會幫助你將複雜物件依賴替換成超級簡單的替換物。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式