Android平台生成二维码(by google.zxing)

查了大部分的资料,发现android平台下生成二维码的例子都是使用谷歌的zxing类,因此仿照某一个帖子编写了一个demo进行测试,仿照的帖子:
https://blog.csdn.net/myname_kk/article/details/77649477
例子中主要用到了BitMatrix,QRCodeWriter两个类,BitMatrix类对象用来存放文本转换好的01二进制数组,QRCodeWriter类用来把BitMatrix数组转成图像
主要的代码如下:
QRImageUtil类:封装QR操作,主要是文本转二维码操作

import android.graphics.Bitmap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.WriterException;

import java.util.Hashtable;
public class QRImageUtil {
    /*
    根据文本内容生成二维码
     */
    public static Bitmap createQRImage(String content, final int width, final int height) {
        //合法性判断
        if(content == null || "".equals(content) ||content.length() <= 0) {
            return null;
        }

        Hashtable<EncodeHintType, String> hints = new Hashtable<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        try {
            BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            int [] pixels = new int [width * height];
            for(int y = 0; y < height; y++) {
                for(int x = 0; x < width; x++) {
                    pixels[y * width + x] = bitMatrix.get(x,y) ? 0xff000000 : 0xffffffff;
                }
            }
            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
            return bitmap;
        }
        catch (WriterException ex) {
            ex.printStackTrace();
        }
        return null;
    }
}

然后,在主界面中,放置文本输入框,图像控件,生成二维码的按钮

public class MainActivity extends AppCompatActivity {
    private Button btnGenerate = null;
    private EditText edtContent = null;
    private ImageView imageView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edtContent = (EditText)this.findViewById(R.id.editText);
        imageView = (ImageView)this.findViewById(R.id.imgQR);
        //register button callback function
        btnGenerate = (Button)this.findViewById(R.id.generateBtn);
        btnGenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String txt = edtContent.getText().toString();
                Bitmap bitmap = QRImageUtil.createQRImage(txt, imageView.getWidth(), imageView.getHeight());
                if(bitmap != null) {
                    imageView.setImageBitmap(bitmap);
                }
            }
        });

    }
}

程序运行的效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/CHALLENG_EVERYTHING/article/details/85053518
今日推荐