前言:现在很多App都集成了扫一扫功能,最常用的微信、QQ等。那么今天我们就来看看怎么样在我们自己的App中集成二维码的扫描与生成功能。OK,废话不多说,我们就开始做吧。
首先看看我们需要的开源库
[github-Zxing官方库的地址 ]:(https://github.com/zxing/zxing)
下面给大家介绍一下,ZXing库里面主要的类以及这些类的作用:
CaptureActivity。这个是启动Activity 也就是扫描器。
CaptureActivityHandler 解码处理类,负责调用另外的线程进行解码。
DecodeThread 解码的线程。
com.google.zxing.client.android.camera 包,摄像头控制包。
ViewfinderView 自定义的View,就是我们看见的拍摄时中间的框框了。
**
如果只需要生成二维码功能,那么只需导入下面一个jar包就行。(最新的到3.3了,需要最新可以到下面链接下载,也可以到官网下载)
Android studio在gradle文件里添加以下:
compile 'com.google.zxing:core:3.3.0'
不是Android studio的提供jar包:下载 core-3.2.1.jar
下载core-3.3.0.jar包 http://repo1.maven.org/maven2/com/google/zxing/core/3.3.0/core-3.3.0.jar
**
生成二维码图片的核心代码:
/**
* 第一个参数是生成二维码的内容(可以是任意字符串,超链接等等),第二三个参数表示生成二维码的宽度和高度
* @param content
* @param width
* @param height
* @return
*/
private Bitmap generateBitmap(String content,int width, int height) {
if (TextUtils.isEmpty(content)) return null;//这里是非空判断,更改为自己非空判断的或者删掉
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
try {
BitMatrix encode = qrCodeWriter.encode(content, 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 (encode.get(j, i)) {
pixels[i * width + j] = 0x00000000;
} else {
pixels[i * width + j] = 0xffffffff;
}
}
}
return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
/**
* 在二维码中间添加Logo图案
*/
private static Bitmap addLogo(Bitmap src, Bitmap logo) {
if (src == null) {
return null;
}
if (logo == null) {
return src;
}
//获取图片的宽高
int srcWidth = src.getWidth();
int srcHeight = src.getHeight();
int logoWidth = logo.getWidth();
int logoHeight = logo.getHeight();
if (srcWidth == 0 || srcHeight == 0) {
return null;
}
if (logoWidth == 0 || logoHeight == 0) {
return src;
}
//logo大小为二维码整体大小的1/5
float scaleFactor = srcWidth * 1.0f / 5 / logoWidth;
Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888);
try {
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(src, 0, 0, null);
canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);
canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
} catch (Exception e) {
bitmap = null;
e.getStackTrace();
}
return bitmap;
}
OK,至此,我们的二维码生成就说完了,就是这么简单。
我们需要将GitHub上的开源项目zxing作为Library导入,在这个开源项目中有一个CaptureActivity,这个Activity专门用来扫描二维码,所以我们只需要在自己的项目中直接来启动这个Activity就可以了。不知道怎么导入的自行搜索,网上已经有很多教程了。不过现在gradle这么NB,那我们能不能直接导入依赖呢?请接下来继续看:
首先要知道Android使用Zxing常用的库有: core, android, android-core, android-integration,而我们实现识别需要的核心库是 core, android-core这两个;作为一个开源项目,库的开发者肯定已经放在了AS对应的仓库中了,那么接下来我们就只需要很简单的添加2个依赖就可以把该Demo所需的依赖库下载。
dependencies {
compile 'com.google.zxing:core:3.3.0';
compile 'com.google.zxing:android-core:3.3.0';
}
是不是很简单,不需要我们去下载然后导入后处理编译问题了(省了很多事)。
之后要调用扫描只需启动CaptureActivity就可以了:
startActivity(new Intent(this, CaptureActivity.class));
谢谢大家观看!
为了向别人、向世界证明自己而努力拼搏,而一旦你真的取得了成绩,才会明白:人无须向别人证明什么,只要你能超越自己。