QrCodeScannerView-Android是基于大名鼎鼎的Zxing二维码框架,在@dlazaro66大神开发的QRCodeReaderView上进行再次开发的一个二维码扫描Library, 提供了二维码扫描相关功能,还可以自定义的二维码扫描框、扫描线、自定义UI布局等等。
该项目参考了以下项目:
https://github.com/zxing/zxing
https://github.com/dlazaro66/QRCodeReaderView
再次感谢上述大神。
- 二维码解析(Decode)
- 二维码生成 (Encode)
- 前/后置摄像头切换
- 开启/停止二维码扫描功能
- 自定义扫描界面UI,轻松定制自己的扫描框、扫描背景、扫描线相关属性
- 获得扫描框的坐标Rect(判断所扫二维码是否在扫描框内等)
- 【1.1.3版本重构创作中...】生成二维码图片并保存、相册解析二维码图片等
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.qingmei2:QrCodeScannerView-Android:1.1.2'
}
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
QRCodeScannerView(二维码扫描业务层View,主要处理Camera扫描二维码相关逻辑)
QRCoverView(二维码扫描UI层View,主要负责对应UI的改变,比如扫描框大小,背景颜色,扫描框边角大小颜色等等):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.qingmei2.qrcodedemos.MainActivity">
<com.qingmei2.library.view.QRCodeScannerView
android:id="@+id/scanner"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.qingmei2.library.view.QRCoverView
android:id="@+id/cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cornerColor="#0f0"
app:laserVisible="false"
app:outsideBackgroundColor="#22000000"
app:scanRectHeight="250dp"
app:scanRectWidth="250dp" />
</FrameLayout>
//自动聚焦间隔2s
mScannerView.setAutofocusInterval(2000L);
//扫描结果监听处理
mScannerView.setOnQRCodeReadListener(new QRCodeScannerView.OnQRCodeScannerListener() {
@Override
public void onDecodeFinish(String text, PointF[] points) {
Log.d("tag", "扫描结果 : " + text);
}
});
//相机权限监听
mScannerView.setOnCheckCameraPermissionListener(new QRCodeScannerView.OnCheckCameraPermissionListener() {
@Override
public boolean onCheckCameraPermission() {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA);
return false;
}
}
});
//开启后置摄像头
mScannerView.setBackCamera();
方法名 | 方法说明 | 补充 |
---|---|---|
setQRDecodingEnabled(boolean qrDecodingEnabled) | 打开二维码扫描开关,默认打开 | |
setAutofocusInterval(int times) | 设置自动聚焦间隔,默认2s | |
setOnQRCodeReadListener(OnQRCodeScannerListener onQRCodeScannerListener) | 二维码解析结果回调 | 需要开发者实现 |
setFrontCamera()/setBackCamera() | 设置Camera默认打开方向 | 需要开发者实现 |
setOnCheckCameraPermissionListener(OnCheckCameraPermissionListener listener) | Camera权限监听回调 | 需要开发者实现 |
switchCameraFace() | 切换前置/后置摄像头 | 扫描过程中切换摄像头 |
startCamera() | 开始扫描 | 建议放在Activity的onResume()方法中 |
stopCamera() | 停止扫描 | 建议放在Activity的onPause()方法中 |
方法名 | 方法说明 | 补充 |
---|---|---|
setCoverViewOutsideColor(int colorRes) | 设置扫描框外部背景颜色 | |
setCoverViewCornerColor(int colorRes) | 设置扫描框颜色 | |
setCoverViewCorner(int cornerH, int cornerW, boolean isDp) | 设置扫描框边角长度H和厚度W | |
setCoverViewConnerFace(boolean isOutside) | 设置扫描框边角的位置是否在外部 | 默认为扫描框内部 |
setCoverViewScanner(int width, int height) | 设置扫描框的宽高(dp) | |
RectF getViewFinderRect() | 获得扫描框的坐标Rect | 可判断二维码是否在扫描框内等 |
当然您也可以直接在xml中声明扫描界面的UI属性:
<com.qingmei2.library.view.QRCoverView
android:id="@+id/cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cornerColor="#0f0" //扫描框边角颜色
app:cornerLength="16dp" //扫描框边角长度
app:cornerWidth="3dp" //扫描框边角厚度
app:cornerOutside="false"//扫描框边角在扫描框内还是外
app:laserVisible="false" //扫描线是否可见
app:laserColor="#0f0" //扫描线颜色
app:outsideBackgroundColor="#22000000" //扫描框外部背景色
app:scanRectHeight="250dp" //扫描框宽度
app:scanRectWidth="250dp" //扫描框高度
/>
在1.1.2版本中,笔者为开发者封装了简单的二维码生成功能
直接new一个就可以了:
//构造方法:
public QRCodeEncoder(Activity activity)
//activity中使用:
qrCodeEncoder = new QRCodeEncoder(this); //初始化
qrCodeEncoder.createQrCode2ImageView(textContent, ivQRCode);//生成二维码
//或者
qrCodeEncoder.createQrCode2ImageView(textContent, ivQRCode, R.mipmap.ic_launcher);//生成带Icon的二维码
方法名 | 方法说明 | 补充 |
---|---|---|
Bitmap createQrCode(String content, int widthAndHeight); | 生成二维码并以Bitmap返回 | |
void createQrCode2ImageView(String content, ImageView imageView); | 在指定的ImageView中生成二维码 | |
当然,您也可以添加简单的Icon在二维码中: | ||
Bitmap createQrCode(String content, int width, int iconRes); | 生成带Icon的二维码并以Bitmap返回 | |
void createQrCode2ImageView(String content, ImageView imageView, int iconRes); | 在指定的ImageView中生成带Icon的二维码 |
当然不止这么简单,我们提供了各种各样的重载方法:
QrCodeScannerView 本身是基于Zxing 3.2.1实现的,所以在Compile QrCodeScannerView的时候会自动Compile Zxing 3.2.1库,如果您的项目中用了其他二维码扫描库引起冲突(比如其他版本的Zxing),请放心将其移除。
关于「相册识别解析二维码」是笔者准备马上添加的功能,关于「本地生成二维码并存储」,QrCodeEncoder已经能够生成Bitmap返回(已经进行简单压缩处理),如果有需求,可以google或者百度,封装简单的工具类,将Bitmap存储本地即可。
正如这个library的名字所述,QrCodeScannerView是一个简单的二维码扫描控件,暂时还没有准备添加条形码识别的支持。
暂无。
- QrCodeEncoder The assistant class can help you create a QR code bitmap into ImageView.
- QrCoverView now you can use attributes in your layout.
1.解析二维码
2.设置扫描框背景
3.切换前/后置摄像头
4.切换扫描线的隐藏/显示
5.设置扫描框角的位置
6.停止扫描