前言:現在很多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檔案裡添加以下:
不是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<EncodeHintType, String> 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 = ; i < height; i++) {
for (int j = ; j < width; j++) {
if (encode.get(j, i)) {
pixels[i * width + j] = ;
} else {
pixels[i * width + j] = ;
}
}
}
return Bitmap.createBitmap(pixels, , 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 == || srcHeight == ) {
return null;
}
if (logoWidth == || logoHeight == ) {
return src;
}
//logo大小為二維碼整體大小的1/5
float scaleFactor = srcWidth * f / / logoWidth;
Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888);
try {
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(src, , , null);
canvas.scale(scaleFactor, scaleFactor, srcWidth / , srcHeight / );
canvas.drawBitmap(logo, (srcWidth - logoWidth) / , (srcHeight - logoHeight) / , 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));
謝謝大家觀看!
為了向别人、向世界證明自己而努力拼搏,而一旦你真的取得了成績,才會明白:人無須向别人證明什麼,隻要你能超越自己。