又见面啦!欢迎来到安卓开发技巧系列的第三篇博文。
我们很高兴至今为止很多人已经发现了这个系列的有趣之处,很感谢你们通过评论和电子邮件的方式向我们表达你们的支持!
说给第一次来这里的朋友吧,很久以前我们(安卓团队)就已经在内部互相分享每周学习到的小技巧了。
最近,我们开始在博客上与其余的开发团队分享我们的小技巧。
可能最近某个星期我们将分享最早的几篇小技巧文章来博君一笑!好吧,言归正传,下面就是这周的小技巧。
技巧 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。它会帮助你将复杂对象依赖替换成超级简单的替换物。