文章目录
- 一、需求
- 二、创建android stdio工程
- 三、设置好JDK
- 四、创建activity
- 五、编写activity_main.xml布局
- 六、build.gradle增加zxing依赖
- 七、MainActivity
一、需求
一个界面,界面上一个文本输入框、一个按钮、一个二维码显示view。可在文本输入框输入字符串,点击按钮后,生成二维码。
二、创建android stdio工程
三、设置好JDK
我开始使用JDK 11:
四、创建activity
得到:
五、编写activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:hint="请输入要生成二维码的字符串" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="生成二维码" />
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
六、build.gradle增加zxing依赖
七、MainActivity
package com.example.gen_qr_code;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.nio.charset.StandardCharsets;
public class MainActivity extends AppCompatActivity {
private EditText editText;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
imageView = findViewById(R.id.imageView);
findViewById(R.id.button).setOnClickListener(v -> {
String text = editText.getText().toString();
byte[] utf8Bytes = text.getBytes(StandardCharsets.UTF_8);
String utf8BytesString = new String(utf8Bytes, StandardCharsets.UTF_8);
if (!TextUtils.isEmpty(utf8BytesString)) {
Bitmap qrCode = null;
try {
qrCode = createQRCode(utf8BytesString);
} catch (WriterException e) {
throw new RuntimeException(e);
}
imageView.setImageBitmap(qrCode);
}
});
}
private Bitmap createQRCode(String text) throws WriterException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, 300, 300);
Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.RGB_565);
for (int x = 0; x < 300; x++) {
for (int y = 0; y < 300; y++) {
bitmap.setPixel(x, y, bitMatrix.get(x, y) ? getResources().getColor(R.color.black) : getResources().getColor(R.color.white));
}
}
return bitmap;
}
}
八、github