查了大部分的资料,发现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);
}
}
});
}
}
程序运行的效果如下: