1.build.gradle
compile project(':zxingAndroid') compile project(':QrCodeScan')
zxing:
https://github.com/zxing/zxing
QrCodeScan:
https://github.com/SkillCollege/QrCodeScan
2.
/**
* 扫描二维码
* @param view
*/
public void scan_code(View view) {
// Intent intent = new Intent(Intents.Scan.ACTION);
Intent intent = new Intent(this,CaptureActivity.class);
intent.putExtra(Intents.Scan.WIDTH,400);
intent.putExtra(Intents.Scan.HEIGHT,400);
startActivityForResult(intent,SCAN_REQUEST);
}
/**
* 创建二维码
* @param view
*/
public void create_code(View view) {
Intent intent = new Intent(Intents.Encode.ACTION);
intent.putExtra(Intents.Encode.DATA,"小熊爱洗澡"); //指定生成的编码数据
intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT); //生成编码数据类型
intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.name()); //生成的编码格式 此处 二维码
startActivityForResult(intent,ENCODE_CODE);
}
public void create_code_forme(View view){
Bitmap bitmap = create2Code("熊大,熊二,光头强");
if (bitmap != null) {
mImage.setImageBitmap(bitmap);
}
}
private Bitmap create2Code(String msg){
//确认二维码大小
int ret = 512;
//二维码配置
HashMap<EncodeHintType,Object> hint = new HashMap<>();
//配置编码
hint.put(EncodeHintType.CHARACTER_SET,"UTF-8");
//容错级别
hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
QRCodeWriter writer = new QRCodeWriter();
try {
//返回一个矩阵 参数(消息,编码的格式,宽度,高度,配置)
BitMatrix encode = writer.encode(msg, BarcodeFormat.QR_CODE, ret, ret, hint);
int width = encode.getWidth();
int height = encode.getHeight();
int[] pixles = new int[width*height];
//确定像素位置的颜色
for (int y= 0;y<height;y++){
int offsetY =y* width;
for(int x=0;x<width;x++){
pixles[offsetY+x] = encode.get(x,y)?BLACK:WHITE;
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//像素颜色数组,偏移量,横向跨度,起始X,起始y,结束x,结束y
bitmap.setPixels(pixles,0,width,0,0,width,height);
if (bitmap != null) {
Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.image);
bitmap = create2CodeIcon(bitmap,icon);
}
return bitmap;
} catch (WriterException e) {
e.printStackTrace();
}
//因为我们生成图片需要 一个byte[]
return null;
}
private Bitmap create2CodeIcon(Bitmap code, Bitmap icon) {
int codeWidth = code.getWidth();
int codeHeight = code.getHeight();
int iconWidth = icon.getWidth();
int iconHeight = icon.getHeight();
//缩放比例
float scale = codeWidth * 1.0f / 5 / iconWidth;
//创建一个空的bitmap
Bitmap bitmap = Bitmap.createBitmap(codeWidth,codeHeight, Bitmap.Config.ARGB_8888);
//创建一个bitmap画布
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(code,0,0,null);
//缩放画布,达到比例缩放
canvas.scale(scale,scale,codeWidth/2,codeHeight/2);
canvas.drawBitmap(icon,(codeWidth-iconWidth)/2,(codeHeight-iconHeight)/2,null);
canvas.save();
code.recycle();
icon.recycle();
return bitmap;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SCAN_REQUEST&&resultCode == RESULT_OK){
String code = data.getStringExtra(Intents.Scan.RESULT);
mText.setText(code);
}
if(requestCode==SCAN_REQUEST_QR&&resultCode == RESULT_OK){
String code = data.getStringExtra("data");
mText.setText(code);
}
}
public void qr_code_scan(View view) {
Intent intent = new Intent(this,com.zbar.lib.CaptureActivity.class);
startActivityForResult(intent,SCAN_REQUEST_QR);
}