首先是生成二维码和识别二维码。这里要用到一个框架core。这是Google的zxing框架中的一部分。二维码其实就是把数据存放在横向和纵向的各个像素点中。而这个框架提供了一个QRCodeWriter方法,但是这个方法返回的并不是位图,所以我们要自己生成位图。
而带logo的二维码其实就是在原先的二维码图片中间加个logo(不影响识别)。
识别二维码是利用框架里面的QRCodeReader方法,把二维码里面包含的数据读出来。下面给出代码注解和截图
public class MainActivity extends AppCompatActivity {
Button button;//生成二维码
Button button2;//生成带logo二维码
Button button3;//识别二位码
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
somelisten();
}
private void init(){
button= (Button) findViewById(R.id.button);
button2= (Button) findViewById(R.id.button2);
button3= (Button) findViewById(R.id.button3);
imageView= (ImageView) findViewById(R.id.imageView);
}
private void somelisten(){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.setImageBitmap(createQR(250,250));
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
imageView.setImageBitmap(createLogoBitmap(createQR(280,280),bitmap));
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
shibie();
}
});
}
//生成二维码
private Bitmap createQR(int width,int height){
QRCodeWriter qrCodeWriter=new QRCodeWriter();
Map<EncodeHintType, String> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
try {
//参数分别是内容,编码格式,宽,长,文本编码。
BitMatrix bitMatrix=qrCodeWriter.encode("雷神123", BarcodeFormat.QR_CODE,width,height,hints);
//解析成像素点
int[] pixels = new int[width * height];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (bitMatrix.get(j, i)) {
pixels[i * width + j] = 0x00000000;
} else {
pixels[i * width + j] = 0xffffffff;
}
}
}