From b465c191b7df0196d9cf104d8a9daadfa510a580 Mon Sep 17 00:00:00 2001 From: Jenly Date: Fri, 6 Aug 2021 14:26:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=86=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 60 ++++++++++++++++++- .../zxing/app/CaptureFragmentActivity.java | 2 +- .../java/com/king/zxing/app/CodeActivity.java | 2 +- .../com/king/zxing/app/CustomActivity.java | 2 +- .../king/zxing/app/CustomCaptureActivity.java | 15 +++-- .../king/zxing/app/EasyCaptureActivity.java | 2 +- .../com/king/zxing/app/QRCodeActivity.java | 22 +++++++ 7 files changed, 95 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index af5da7c..817521a 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,7 @@ CameraScan配置示例 .setOnScanResultCallback(this)//设置扫码结果回调,需要自己处理或者需要连扫时,可设置回调,自己去处理相关逻辑 .setAnalyzer(new MultiFormatAnalyzer(new DecodeConfig()))//设置分析器,DecodeConfig可以配置一些解码时的配置信息,如果内置的不满足您的需求,你也可以自定义实现, .setAnalyzeImage(true)//设置是否分析图片,默认为true。如果设置为false,相当于关闭了扫码识别功能 - .startCamera();//启动预览 + .startCamera();//启动预览(如果是通过继承CaptureActivity或CaptureFragment实现扫码无需调用这句。) //设置闪光灯(手电筒)是否开启,需在startCamera之后调用才有效 @@ -218,6 +218,64 @@ CameraScan配置示例(只需识别二维码的配置示例) .setAnalyzer(new MultiFormatAnalyzer(decodeConfig));//设置分析器,如果内置实现的一些分析器不满足您的需求,你也可以自定义去实现 ``` +通过继承CaptureActivity实现扫二维码完整示例 +```java +public class QRCodeActivity extends CaptureActivity { + + + @Override + public int getLayoutId() { + return R.layout.qr_code_activity; + } + + @Override + public void initCameraScan() { + super.initCameraScan(); + + //初始化解码配置 + DecodeConfig decodeConfig = new DecodeConfig(); + decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS)//如果只有识别二维码的需求,这样设置效率会更高,不设置默认为DecodeFormatManager.DEFAULT_HINTS + .setFullAreaScan(false)//设置是否全区域识别,默认false + .setAreaRectRatio(0.8f)//设置识别区域比例,默认0.8,设置的比例最终会在预览区域裁剪基于此比例的一个矩形进行扫码识别 + .setAreaRectVerticalOffset(0)//设置识别区域垂直方向偏移量,默认为0,为0表示居中,可以为负数 + .setAreaRectHorizontalOffset(0);//设置识别区域水平方向偏移量,默认为0,为0表示居中,可以为负数 + + //在启动预览之前,设置分析器,只识别二维码 + getCameraScan() + .setVibrate(true)//设置是否震动,默认为false + .setNeedAutoZoom(true)//二维码太小时可自动缩放,默认为false + .setAnalyzer(new MultiFormatAnalyzer(decodeConfig));//设置分析器,如果内置实现的一些分析器不满足您的需求,你也可以自定义去实现 + } + + + /** + * 扫码结果回调 + * @param result + * @return 返回false表示不拦截,将关闭扫码界面并将结果返回给调用界面; + * 返回true表示拦截,需自己处理逻辑。当isAnalyze为true时,默认会继续分析图像(也就是连扫)。 + * 如果只是想拦截扫码结果回调,并不想继续分析图像(不想连扫),请在拦截扫码逻辑处通过调 + * 用{@link CameraScan#setAnalyzeImage(boolean)}, + * 因为{@link CameraScan#setAnalyzeImage(boolean)}方法能动态控制是否继续分析图像。 + * + */ + @Override + public boolean onScanResultCallback(Result result) { + /* + * 因为setAnalyzeImage方法能动态控制是否继续分析图像。 + * + * 1. 因为分析图像默认为true,如果想支持连扫,返回true即可。 + * 当连扫的处理逻辑比较复杂时,请在处理逻辑前调用getCameraScan().setAnalyzeImage(false), + * 来停止分析图像,等逻辑处理完后再调用getCameraScan().setAnalyzeImage(true)来继续分析图像。 + * + * 2. 如果只是想拦截扫码结果回调自己处理逻辑,但并不想继续分析图像(即不想连扫),可通过 + * 调用getCameraScan().setAnalyzeImage(false)来停止分析图像。 + */ + return super.onScanResultCallback(result); + } +} + +``` + 如果直接使用CaptureActivity需在您项目的AndroidManifest中添加如下配置 ```Xml