我正在撰寫一個 Android 測驗應用程式來查看如何處理 QR 碼。這是主要活動(MainActivity.kt)的代碼,下面是一個問題。
package me.software.myTestApp
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.View
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType
import com.google.zxing.qrcode.QRCodeWriter
class MainActivity : AppCompatActivity() {
private var constraintLayout: ConstraintLayout? = null
private var deviceFrameID:Int = 0
var squareImg: ImageView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
constraintLayout = findViewById(R.id.main)
deviceFrameID = resources.getIdentifier("main","id",packageName)
squareImg = ImageView(this)
squareImg?.id = View.generateViewId()
val constrSet = ConstraintSet()
constraintLayout?.addView(squareImg)
val bm = getQrCodeBitmap(
"HELLI-HELLO",
"JIko98TEST"
)
val mDrawable: Drawable = BitmapDrawable(resources, bm)
squareImg?.background = mDrawable
val params = squareImg?.layoutParams
params?.width = 512
params?.height = 512
squareImg?.layoutParams = params
constrSet.connect(squareImg!!.id, ConstraintSet.LEFT, deviceFrameID, ConstraintSet.LEFT)
constrSet.connect(squareImg!!.id, ConstraintSet.RIGHT, deviceFrameID, ConstraintSet.RIGHT)
constrSet.connect(squareImg!!.id, ConstraintSet.TOP, deviceFrameID, ConstraintSet.TOP)
constrSet.connect(squareImg!!.id, ConstraintSet.BOTTOM, deviceFrameID, ConstraintSet.BOTTOM)
constrSet.applyTo(constraintLayout)
}
fun getQrCodeBitmap(ssid: String, password: String): Bitmap {/*From the net*/
val size = 512 //pixels
val qrCodeContent = "WIFI:S:$ssid;T:WPA;P:$password;;"
val hints = hashMapOf<EncodeHintType, Int>().also { it[EncodeHintType.MARGIN] = 1 } // Make the QR code buffer border narrower
val bits = QRCodeWriter().encode(qrCodeContent, BarcodeFormat.QR_CODE, size, size)
return Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565).also {
for (x in 0 until size) {
for (y in 0 until size) {
it.setPixel(x, y, if (bits[x, y]) Color.BLACK else Color.WHITE)
}
}
}
}
}
通過使用這個代碼,我期望看到一個完美的方形二維碼,水平和垂直居中。但我看到的是一個相當居中的二維碼,而不是正方形,它被拉伸為顯示幕的形狀。我需要修改什么以獲得完美的正方形?
uj5u.com熱心網友回復:
ConstraintSet不知道 QR 碼視圖,因此任何約束它的嘗試都會失敗,因為ConstraintSet不知道它。ConstraintSet填充了對ConstraintSet#clone(ConstraintLayout)的呼叫
將代碼更改為以下內容:
constraintLayout?.addView(squareImg)
// The ConstraintLayout now contains all views, so the ConstraintSet
// can get a handle to those views for later connections.
val constrSet = ConstraintSet()
constrSet.clone(constraintLayout)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474134.html
