Kotlin: ZXing生成二維碼

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!!
            )

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章