快速布局条形码

主要使用基于封装之后的 ZXing Android Embedded 库,原型是 Google 做的一个开源项目,叫做 ZXing(zebra crossing)

常规使用方法 看github介绍 项目地址

自由定制方法 :

配置文件

compile 'com.journeyapps:zxing-android-embedded:3.5.0'

具体看项目最新版

具体代码修改

  1. 利用 DecoratedBarcodeView 显示扫描窗口

DecoratedBarcodeView是条形码扫描界面的布局 可定制自己的布局样式

  1. 重写 CaptureManager

CaptureManager是扫描窗口 以及扫描后数据传输 以及动作 都可以在这个类里修改成自己想要的动作 比如加个自己的回调 比如存入数据库 比如用广播发出去

本次使用

本次使用主要是修改CaptureManager类 达到扫描后不结束当前Activity 数据显示在当前界面 继续扫描

本次修改

修改returnResult(BarcodeResult rawResult)方法 去掉finish()

新增自己的回调接口

    /**
     * 修改此方法达到 扫描后不结束当前Activity
     * @param rawResult 新增的回调接口
     */
    protected void returnResult(BarcodeResult rawResult) {
        Intent intent = resultIntent(rawResult, getBarcodeImagePath(rawResult));
        activity.setResult(Activity.RESULT_OK, intent);
        if (barcodeView.getBarcodeView().isCameraClosed()) {
            if (null != mResultCallBack) {
                mResultCallBack.callBack(IntentIntegrator.REQUEST_CODE, Activity.RESULT_OK, intent);
            }
        } else {
            finishWhenClosed = true;
        }
        barcodeView.pause();
        inactivityTimer.cancel();
        barcodeView.resume();
    }

回调接口

    /**
     * 新增回调
     */
    public interface ResultCallBack {
        void callBack(int requestCode, int resultCode, Intent intent);
    }

    private ResultCallBack mResultCallBack;

    public void setResultCallBack(ResultCallBack resultCallBack) {
        this.mResultCallBack = resultCallBack;
    }

新增调用decode() 达到扫描后继续扫描

private BarcodeCallback callback = new BarcodeCallback() {
        @Override
        public void barcodeResult(final BarcodeResult result) {
            barcodeView.pause();
            beepManager.playBeepSoundAndVibrate();

            handler.post(new Runnable() {
                @Override
                public void run() {
                    returnResult(result);
                    //扫描后持续扫描
                    decode();
                }
            });
        }

        @Override
        public void possibleResultPoints(List<ResultPoint> resultPoints) {

        }
    };

至此, 条形码定制就完成咯