Generate Aztec code with zxing

This commit is contained in:
Luke Hubmayer-Werner 2024-08-28 00:59:21 +09:30
parent b42a25e42e
commit b67da818c2
5 changed files with 69 additions and 9 deletions

View File

@ -50,6 +50,7 @@ dependencies {
implementation(libs.androidx.navigation.fragment.ktx)
implementation(libs.androidx.navigation.ui.ktx)
implementation(libs.play.services.code.scanner)
implementation(libs.core)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)

View File

@ -0,0 +1,33 @@
package com.lhw.pdf
import android.graphics.Bitmap
import android.graphics.Color
import com.google.zxing.BarcodeFormat
import com.google.zxing.MultiFormatWriter
import com.google.zxing.common.BitMatrix
class BarcodeGenerator {
private val bgColor = Color.WHITE
private val fgColor = Color.BLACK
fun createBitmap(bitMatrix: BitMatrix): Bitmap {
val width = bitMatrix.width
val height = bitMatrix.height
val pixels = IntArray(width*height)
for (y in 0..<height) {
val yW = y*width
for (x in 0..<width) {
pixels[x+yW] = if (bitMatrix.get(x, y)) fgColor else bgColor
}
}
return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888)
}
fun encode(src: String): BitMatrix {
return MultiFormatWriter().encode(src, BarcodeFormat.AZTEC, 1, 1)
}
fun encodeBitmap(src: String): Bitmap {
return createBitmap(encode(src))
}
}

View File

@ -1,16 +1,21 @@
package com.lhw.pdf.ui
import android.graphics.drawable.BitmapDrawable
import android.media.Image
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.google.mlkit.vision.barcode.common.Barcode
import com.google.mlkit.vision.codescanner.GmsBarcodeScannerOptions
import com.google.mlkit.vision.codescanner.GmsBarcodeScanning
import com.lhw.pdf.BarcodeGenerator
import com.lhw.pdf.R
import com.lhw.pdf.databinding.FragmentNetworkBinding
import com.lhw.pdf.databinding.FragmentSlideshowBinding
import kotlin.math.min
class NetworkFragment : Fragment() {
private var _binding: FragmentNetworkBinding? = null
@ -23,6 +28,17 @@ class NetworkFragment : Fragment() {
val root: View = binding.root
binding.btnScanQrCode.setOnClickListener { getQrCode() }
val size = 800 //min(binding.linearLayout.width, binding.linearLayout.height)
val qrBitmap = BarcodeGenerator().encodeBitmap("pretend I encoded an //ip address:port in here")
val drawable = BitmapDrawable(resources, qrBitmap).apply { isFilterBitmap = false }
val imageView = ImageView(context).apply {
setImageDrawable(drawable)
scaleType = ImageView.ScaleType.FIT_CENTER
minimumWidth = size
minimumHeight = size
maxHeight = size
}
binding.linearLayout.addView(imageView)
return root
}

View File

@ -5,10 +5,16 @@
android:layout_height="match_parent"
tools:context=".ui.NetworkFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Network fragment"
android:textAlignment="center" />
@ -18,4 +24,6 @@
android:layout_height="wrap_content"
android:text="Scan QR Code" />
</LinearLayout>
</FrameLayout>

View File

@ -14,6 +14,7 @@ navigationFragmentKtx = "2.7.7"
navigationUiKtx = "2.7.7"
pdfboxAndroid = "2.0.27.0"
playServicesCodeScanner = "16.1.0"
core = "3.5.3"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@ -29,6 +30,7 @@ androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navi
androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" }
pdfbox-android = { module = "com.tom-roush:pdfbox-android", version.ref = "pdfboxAndroid" }
play-services-code-scanner = { group = "com.google.android.gms", name = "play-services-code-scanner", version.ref = "playServicesCodeScanner" }
core = { group = "com.google.zxing", name = "core", version.ref = "core" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }