1. 引包
implementation "com.google.zxing:core:3.3.2"
implementation "com.journeyapps:zxing-android-embedded:3.6.0"
2. 調用類QrCodeUtil的封裝方法createQRImage ,獲得二維碼的Bitmap:
object QrCodeUtil {
var result: Result<String>? = null
fun createQRImage(
content: String?, widthPix: Int, heightPix: Int
): Result<Bitmap>? {
try {
val hints = HashMap<EncodeHintType, Any>()
hints[EncodeHintType.CHARACTER_SET] = StandardCharsets.UTF_8.name()
hints[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.H
hints[EncodeHintType.MARGIN] = 1
var bitMatrix: BitMatrix? = null
try {
bitMatrix = QRCodeWriter().encode(
content, BarcodeFormat.QR_CODE, widthPix,
heightPix, hints
)
} catch (e: WriterException) {
Crashlytics.logException(e)
result =
Result.Error(e)
}
val pixels = IntArray(widthPix * heightPix)
for (y in 0 until heightPix) {
for (x in 0 until widthPix) {
if (bitMatrix != null) {
if (bitMatrix.get(x, y)) {
pixels[y * widthPix + x] = -0x1000000
} else {
pixels[y * widthPix + x] = -0x1
}
} else {
return null
}
}
}
val bitmap: Bitmap? = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888)
bitmap!!.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix)
return Result.Success(bitmap)
} catch (e: Exception) {
Crashlytics.logException(e)
result =
Result.Error(e)
}
return null
}
}
調用:
QrCodeUtil.createQRImage(
longLink,
resources.getDimension(R.dimen.width_invite_member_qrcode).toInt(),
resources.getDimension(R.dimen.height_invite_member_qrcode).toInt()
)!!
3. 將Bitmap渲染界面即可:
GlideUtils.loadBitmap(
viewDataBinding?.imageviewFullLinkQrCode!!,
inviteMemberViewModel.qrBitmap!!
)