基于 Google ML Kit 快速集成二维码扫描,速度比 zxing 快,可配置相册,闪光灯,相机可以调整焦距放大缩小,自定义扫描线颜色,自定义背景颜色,自定义遮罩层,支持同时扫多个二维码和条形码

MNMLKitScanner

项目地址:maning0303/MNMLKitScanner 

简介: 基于 Google ML Kit 快速集成二维码扫描,速度比 zxing 快,可配置相册,闪光灯,相机可以调整焦距放大缩小,自定义扫描线颜色,自定义背景颜色,自定义遮罩层,支持同时扫多个二维码和条形码

更多:作者   提 Bug   

标签:

基于 Google MLKit 快速集成二维码扫描,速度比 zxing 快,可配置相册,闪光灯,相机可以调整焦距放大缩小,自定义扫描线颜色,自定义背景颜色,自定义遮罩层,支持同时扫多个二维码和条形码

正在上传…重新上传取消

功能:

1:二维码扫描,手势缩放,无拉伸,样式自定义
2:相册中选取图片识别
3: 相机可以调整焦距放大缩小
4: 完全自定义遮罩层
5: 支持微信多个二维码/条形码同时扫描

截图:

    

如何添加

Gradle 添加:

1.在 Project 的 build.gradle 中添加仓库地址

    allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

2.在 Module 目录下的 build.gradle 中添加依赖

    dependencies {

            implementation 'com.github.maning0303:MNMLKitScanner:V1.0.1'
            //下面版本自己控制
            implementation 'com.google.mlkit:barcode-scanning:17.0.0'
            implementation "androidx.camera:camera-core:1.0.2"
            implementation "androidx.camera:camera-camera2:1.0.2"
            implementation "androidx.camera:camera-lifecycle:1.0.2"
            implementation "androidx.camera:camera-view:1.0.0-alpha25"

    }

使用方法:

进入需要提前申请相机权限;进入需要提前申请相机权限;进入需要提前申请相机权限;

        1:开始扫描:
            //默认扫描
            MNScanManager.startScan(this, new MNScanCallback() {
                   @Override
                   public void onActivityResult(int resultCode, Intent data) {
                    switch (resultCode) {
                        case MNScanManager.RESULT_SUCCESS:
                            ArrayList<String> results = data.getStringArrayListExtra(MNScanManager.INTENT_KEY_RESULT_SUCCESS);
                            break;
                        case MNScanManager.RESULT_FAIL:
                            String resultError = data.getStringExtra(MNScanManager.INTENT_KEY_RESULT_ERROR);
                            break;
                        case MNScanManager.RESULT_CANCLE:
                            showToast("取消扫码");
                            break;
                    }
                   }
            });

            //自定义扫描
            MNScanConfig scanConfig = new MNScanConfig.Builder()
                    //设置完成震动
                    .isShowVibrate(true)
                    //扫描完成声音
                    .isShowBeep(true)
                    //显示相册功能
                    .isShowPhotoAlbum(true)
                    //显示闪光灯
                    .isShowLightController(true)
                    //打开扫描页面的动画
                    .setActivityOpenAnime(R.anim.activity_anmie_in)
                    //退出扫描页面动画
                    .setActivityExitAnime(R.anim.activity_anmie_out)
                    //自定义文案
                    .setScanHintText("xxxx")
                    .setScanHintTextColor("#FF0000")
                    .setScanHintTextSize(14)
                    //扫描线的颜色
                    .setScanColor("#FF0000")
                    //是否支持手势缩放
                    .setSupportZoom(true)
                    //扫描线样式
                    .setLaserStyle(MNScanConfig.LaserStyle.Grid/MNScanConfig.LaserStyle.Line)
                    //背景颜色
                    .setBgColor("")
                    //网格扫描线的列数
                    .setGridScanLineColumn(30)
                    //网格高度
                    .setGridScanLineHeight(300)
                    //是否全屏扫描,默认全屏
                    .setFullScreenScan(true)
                    //单位 dp
                    .setResultPointConfigs(36, 12, 3, colorResultPointStroke, colorResultPoint)
                    //状态栏设置
                    .setStatusBarConfigs(colorStatusBar, true)
                    //自定义遮罩
                    .setCustomShadeViewLayoutID(R.layout.layout_custom_view, new MNCustomViewBindCallback() {
                        @Override
                        public void onBindView(View customView) {
                            //TODO:通过 findviewById 获取 View
                        }
                    })
                    .builder();
            MNScanManager.startScan(this, scanConfig, new MNScanCallback() {
                @Override
                public void onActivityResult(int resultCode, Intent data) {
                    switch (resultCode) {
                        case MNScanManager.RESULT_SUCCESS:
                            String resultSuccess = data.getStringExtra(MNScanManager.INTENT_KEY_RESULT_SUCCESS);
                            break;
                        case MNScanManager.RESULT_FAIL:
                            String resultError = data.getStringExtra(MNScanManager.INTENT_KEY_RESULT_ERROR);
                            break;
                        case MNScanManager.RESULT_CANCLE:
                            showToast("取消扫码");
                            break;
                    }
                }
            });

        2.提供扫描界面相关方法(自定义遮罩层会使用):
            /**
             * 关闭当前页面
             */
            MNScanManager.closeScanPage();

            /**
             * 打开相册扫描图片
             */
            MNScanManager.openAlbumPage();

            /**
             * 打开手电筒
             */
            MNScanManager.openScanLight();

            /**
             * 关闭手电筒
             */
            MNScanManager.closeScanLight();

            /**
             * 手电筒是否开启
             */
            MNScanManager.isLightOn();

感谢:

googlesamples/mlkit

jenly1314/MLKit

Ye-Miao/StatusBarUtil

感谢所有开源的人;

推荐:

NameDescribe
GankMM(Material Design & MVP & Retrofit + OKHttp & RecyclerView ...)Gank.io Android 客户端:每天一张美女图片,一个视频短片,若干 Android,iOS 等程序干货,周一到周五每天更新,数据全部由 干货集中营 提供,持续更新。
MNUpdateAPKAndroid APK 版本更新的下载和安装,适配 7.0,简单方便。
MNImageBrowser交互特效的图片浏览框架,微信向下滑动动态关闭
MNZXingCode快速集成二维码扫描和生成二维码
MNMLKitScanner基于 Google MLKit 快速集成二维码扫描,速度比 zxing 快
MNPasswordEditText类似微信支付宝的密码输入框。
MClearEditText带有删除功能的 EditText
MNCrashMonitorDebug 监听程序崩溃日志,展示崩溃日志列表,方便自己平时调试。
MNProgressHUDMNProgressHUD 是对常用的自定义弹框封装,加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,支持背景颜色,圆角,边框和文字的自定义。
SwitcherView垂直滚动的广告栏文字展示。
MNVideoPlayerSurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,手势快进快退、调节音量,亮度等。------代码简单,新手可以看一看。
MNChangeSkinAndroid 夜间模式,通过 Theme 实现
MNXUtilsDBxUtils3 数据库模块单独抽取出来,方便使用。
MNCalendar简单的日历控件练习,水平方向日历支持手势滑动切换,跳转月份;垂直方向日历选取区间范围。
MNSwipeToLoadDemo利用 SwipeToLoadLayout 实现的各种下拉刷新效果(饿了吗,京东,百度外卖,美团外卖,天猫下拉刷新等)。

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio中使用二维码扫描和生成功能需要借助zxing.jar包。zxing是一个开源的二维码处理库,可以实现二维码扫描和生成。 首先,我们需要将zxing.jar包添加到我们的Android Studio项目中。可以通过两种方式来导入这个库。一种方式是将zxing.jar包拷贝到app/libs目录下,然后在build.gradle文件中添加依赖。另一种方式是通过在build.gradle文件的dependencies中添加远程依赖来导入库。如下所示: ``` dependencies { implementation 'com.google.zxing:core:3.4.1' } ``` 导入zxing.jar包后,我们就可以使用其中的类和方法来实现二维码扫描和生成。 要实现二维码扫描功能,我们可以使用IntentIntegrator类。在需要扫描二维码的地方,调用IntentIntegrator的initiateScan方法即可启动扫描界面。扫描结果可以通过onActivityResult方法来获取。可以参考下面的代码片段: ``` IntentIntegrator integrator = new IntentIntegrator(this); integrator.setCaptureActivity(CustomCaptureActivity.class); //自定义扫描界面 integrator.setOrientationLocked(false); integrator.initiateScan(); @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (result != null) { if (result.getContents() == null) { //扫描取消 } else { String content = result.getContents(); //获取扫描结果 } } } ``` 要实现二维码的生成功能,我们可以使用MultiFormatWriter类和BitMatrix类。我们可以通过调用MultiFormatWriter的encode方法来生成BitMatrix,然后将BitMatrix转换成Bitmap。可以参考下面的代码片段: ``` MultiFormatWriter writer = new MultiFormatWriter(); try { BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height); int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); imageView.setImageBitmap(bitmap); //在ImageView中显示生成的二维码 } catch (WriterException e) { e.printStackTrace(); } ``` 通过以上步骤,我们就可以在Android Studio中实现二维码扫描和生成功能了。注意,在使用zxing库的时候,我们需要添加相关的权限,如相机权限等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值