AndroidのXMLレイアウトをJetpack Composeに移行していて、QRコードリーダーのライブラリであるzxing-android-embedded
を使っている部分を移行することがありました。
しかしJetpack Composeで使っている情報が少なかったので備忘として簡単に残しておきます。
実装
Zxing.kt
@Composable
fun AdminClubMembershipScanScreen(navController: NavHostController) {
val context = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current
val compoundBarcodeView = remember {
CompoundBarcodeView(context).apply {
val capture = CaptureManager(context as Activity, this)
capture.initializeFromIntent(context.intent, null)
this.setStatusText("")
capture.decode()
// 読み取り枠部分のサイズ設定
barcodeView.fromingRectSize = Size(300, 300)
// 中央に表示される赤線を消す
this.viewFinder.setLaserVisibility(false)
// 枠外の背景の色を変更
this.viewFinder.setMaskColor(color.zxing_viewfinder_mask)
barcodeView.decodeContinuous(
object : BarcodeCallback {
override fun barcodeResult(result: BarcodeResult?) {
// 読み取り成功した時の処理などを書く
}
}
)
}
}
DisposableEffect(lifecycleOwner) {
compoundView.resume()
onDispose {
// 読み取りストップ
compoundBarcodeView.pause()
compoundBarcodeView.barcodeView.stopDecoding()
}
}
AndroidView(
modifier = Modifier,
factory = {
compoundBarcodeView
},
)
}
何かしらカスタムしたい場合は、とりあえずCompoundBarcodeViewを作ってそこから内部構造を追っていけば見つかると思います。
まあ今はGoogle Code Scanner APIやML Kitを使う方が主流なのでしょうかねー