如何像微信一样扫码自由?

news2024/11/25 13:03:55

https://github.com/devilsen/CZXing

我在使用zxing的总是想扫码的时候怎么才能够快速校准,多个二维码扫描的时候怎么才能指定二维码呢。于是我在Github上找到了CZxing这个控件。在使用的时候发现了有些小问题。

扫码结果没有回调。
回调没有反应;是因为 ScanLayout 没有实现 ScanListener.onScanSuccess 这个方法。

   Scanner.with(this)
                .setMaskColor(resources.getColor(R.color.mask_color))
                .setBorderColor(resources.getColor(R.color.box_line))
                .setBorderSize(BarCodeUtil.dp2px(this, 200))
//                .setBorderSize(BarCodeUtil.dp2px(this, 200), BarCodeUtil.dp2px(this, 100))
                .setCornerColor(resources.getColor(R.color.corner))
                .setScanLineColors(scanColors)
//                .setHorizontalScanLine()
//                .setBarcodeFormat(BarcodeFormat.EAN_13)
                .setTitle("")
                .showAlbum(true)
                .enableOpenCVDetect(true)
                .setScanNoticeText("扫描二维码")
                .setFlashLightOnText("打开闪光灯")
                .setFlashLightOffText("关闭闪光灯")
//                .setFlashLightInvisible()
                .setFlashLightOnDrawable(R.drawable.ic_highlight_blue_open_24dp)
                .setFlashLightOffDrawable(R.drawable.ic_highlight_white_close_24dp)
                .continuousScan()
                .detectorModel(detectorPrototxtPath, detectorCaffeModelPath)
                .superResolutionModel(superResolutionPrototxtPath, superResolutionCaffeModelPath)
//                .enableOpenCVDetect(true)
                .setOnClickAlbumDelegate(new ScanActivityDelegate.OnClickAlbumDelegate() {
                    @Override
                    public void onClickAlbum(Activity activity) {
                        Intent albumIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        activity.startActivityForResult(albumIntent, CODE_SELECT_IMAGE);
                    }

                    @Override
                    public void onSelectData(int requestCode, Intent data) {
                        if (requestCode == CODE_SELECT_IMAGE) {
                            decodeImage(data);
                        }
                    }
                })
                .setOnScanResultDelegate(new ScanActivityDelegate.OnScanDelegate() {
                    @Override
                    public void onScanResult(@NonNull final Activity activity, @NonNull final String result, @NonNull BarcodeFormat format) {
                        final String showContent = "format: " + format.name() + "  code: " + result;
                      
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                  
                                Toast.makeText(MainActivity.this, showContent, Toast.LENGTH_SHORT).show();
                                finish();
                            }
                        });
                    }
                })
                .start();

ScanLayout.java

    @Override
    public void onReadCodeResult(List<CodeResult> resultList) {
        for (CodeResult result : resultList) {
            BarCodeUtil.d("result : " + result.toString());
        }
        //大于2个二维码,则表两个记号
        if (resultList.size() > 1) {
            showResultPoint(resultList);
        } else {
        	//result<=1的时候则返回结果
            if (mScanListener != null) {
                mScanListener.onScanSuccess(resultList);
            }
        }
    }
	
	//标记扫描点
    private void addPointView(final CodeResult result, int resultSize) {
        int[] points = result.getPoints();
        if (points == null || points.length < 4) return;
        int x = points[0];
        int y = points[1];
        int width = points[2];
        int height = points[3];

        final PointView view = new PointView(getContext());
        if (resultSize > 1) {
            view.drawArrow();
            view.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mScanListener != null) {
                        mScanListener.onClickResult(result);
                    }
                }
            });
        }
        mResultViews.add(view);
        if (mResultColor > 0) {
            view.setColor(mResultColor);
        }

        int xOffset = (width - mPointSize) / 2;
        int yOffset = (height - mPointSize) / 2;

        xOffset = Math.max(xOffset, 0);
        yOffset = Math.max(yOffset, 0);

        final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.leftMargin = x + xOffset;
        params.topMargin = y + yOffset;

        mHandler.post(new Runnable() {
            @Override
            public void run() {
                addView(view, params);
            }
        });
        //关闭相机扫描
        closeCamera();
        //隐藏扫描线
        if (mScanBox != null) {
           runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mScanBox.setVisibility(View.GONE);
                }
            });
        }
    }
这样写会报错的
       mScanBox.setVisibility(View.GONE);
       

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二维码智慧门牌管理系统:提升城市管理效率与服务水平

文章目录 前言一、系统原理及特点二、系统的优势与应用 前言 在当今快速发展的信息化时代&#xff0c;如何有效地管理城市地址信息成为了各大城市面临的重要问题。传统的门牌管理系统已经无法满足现代城市的需求&#xff0c;而二维码智慧门牌管理系统作为全新的解决方案&#…

数据库开发-MySQL

数据库设计-DDL 下面我们就正式的进入到SQL语句的学习&#xff0c;在学习之前先给大家介绍一下我们要开发一个项目&#xff0c;整个开发流程是什么样的&#xff0c;以及在流程当中哪些环节会涉及到数据库。 项目开发流程 需求文档&#xff1a; 在我们开发一个项目或者项目当中…

Linux文件内容显示练习

1.新建2个文件b1.txt b2.txt ,使用vim打开b1.txt 输入“Hello World”字符串,将b1.txt硬链接到b2.txt 查看2个文件的硬连接数 [rootserver ~]# vim b1.txt [rootserver ~]# ln b1.txt b2.txt #建立硬链接 [rootserver ~]# stat b2.txt [rootserver ~]# stat b1.txt [r…

现货黄金的价格如何变动

现货黄金每天的交易时间很长&#xff0c;价格几乎全天24小时都处于波动之中&#xff0c;由于受到各种政治、经济因素的影响&#xff0c;价格波动有时可以来得十分迅猛&#xff0c;在一小时就可以波动二、三十美元&#xff0c;但有时却可以连续几天都维持在数美元的区间内波动。…

《使用 sCrypt 构建井字游戏》课程上线

《使用 sCrypt 构建井字游戏》课程上线 Learn sCrypt。Learn sCrypt 是一个交互式学习网站&#xff0c;旨在帮助开发者更快、更轻松地学习和掌握比特币智能合约开发语言 sCrypt。 井字游戏非常简单&#xff0c;就是使用两个玩家(分别是 Alice 和 Bob)的比特币地址初始化合约&a…

Spring框架——介绍与基本概念!

一、Spring框架概述 1.什么是Spring Spring是一个轻量级的Java 开发开源框架&#xff0c;用于构建企业级应用程序。它提供了一组广泛使用的技术和API&#xff0c;包括依赖注入、AOP、数据访问、事务管理、Web开发和集成测试等。它是为了解决企业应用开发的复杂性而创建的。框…

c盘中temp可以删除吗?appdata\local\temp可以删除吗?

http://www.win10d.com/jiaocheng/22594.html C盘AppData文件夹是一个系统文件夹&#xff0c;里面存储着临时文件&#xff0c;各种应用的自定义设置&#xff0c;快速启动文件等。近期有用户发现appdata\local\temp占用了大量的空间&#xff0c;那么该文件可以删除吗&#xff1f…

Java 21 发布,带来诸多新特性又一次创新的飞跃

一、引言 2023年9月19日&#xff0c;Oracle公司正式发布了JDK 21&#xff0c;这是按照六个月发布周期准时交付的第12个功能版本。 这种可预测性让开发者能够轻松地管理他们对创新的采用&#xff0c;感谢稳定的改进流。JDK 21不仅包含了数千个性能、稳定性和安全性更新&#xf…

比特币上的可验证延迟函数

可验证延迟函数 (VDF) 是一种需要大量 顺序计算 来评估但可以快速验证的函数。我们首次在比特币上实现了它。VDF 作为密码学技术可用于构建大量新应用程序&#xff0c;例如公共随机信标、计算时间戳和数据复制证明。 VDF 场景 链上随机信标 在区块链中很难实现随机性&#xf…

php生成二维码合成文字、背景图并保存本地图片

目录 1、实现效果&#xff0c;二维码二维码合成文字、背景图 2、下载并引入qrcode 3、创建static文件夹下载字体和背景图到这 4、创建test2.php&#xff0c;合成代码 1、实现效果&#xff0c;二维码二维码合成文字、背景图 2、下载并引入qrcode 1、到phpqrcpde官网下载类库…

UltraEdit 22 编辑器 for Mac

UltraEdit 是一款功能强大的文本编辑器和源代码编辑器。它具有多种功能&#xff0c;适用于程序员、网站开发人员和其他需要处理大量文本内容的用户。 UltraEdit 提供了正则表达式搜索和替换功能&#xff0c;可以快速查找和修改文本中的特定内容。它还支持多文件编辑和多窗口布局…

掌握文案新技能,拓世AI让你成为朋友圈文案达人

“人生如戏&#xff0c;戏如人生”&#xff0c;这是一句缥缈却真实的话&#xff0c;我们在生活中扮演着各种角色&#xff0c;经营自己的人生。如同美国社会学家戈夫曼提出的“拟剧论”&#xff1a;他将社会和人生比作一个大舞台&#xff0c;我们都在关心如何在众多观众面前打造…

Linux动态库

定义&#xff1a;动态函数库&#xff0c;是在程序执行时动态&#xff08;临时&#xff09;由目标程序去调用 优点&#xff1a; 调用时不复制&#xff0c;程序运行时动态加载到内存&#xff0c;供程序调用&#xff0c;系统只加载一次&#xff0c;多个程序可以共用&#xff0c;…

百亿、补贴这种低价怎么控

随着电商平台流量竞争的激烈演变&#xff0c;越来越多的促销形式进入人们的眼球&#xff0c;而店铺最简单的营销就是通过价格&#xff0c;所以低价销售成了各平台吸引消费者的方式&#xff0c;百亿补贴因为其独特的属性&#xff0c;与平台挂钩&#xff0c;通过“全网最低价”的…

VB在窗体中显示1000以内的完数

VB在窗体中显示1000以内的完数 在窗体中显示1000以内的完数&#xff08;如果一个整数的所有因子&#xff08;包括1&#xff0c;但不包括本身&#xff09;之和与该数相等&#xff0c;则称这个数字为完数。例如6123&#xff0c;所以6是一个完数&#xff09; Private Function Is…

【前端知识】Three 学习日志(五)—— 点光源辅助观察

Three 学习日志&#xff08;五&#xff09;—— 点光源辅助观察 一、引入点光源辅助观察 // 光源辅助观察 const pointLightHelper new THREE.PointLightHelper(pointLight, 10); scene.add(pointLightHelper);二、改变点光源位置 // 点光源位置 pointLight.position.set(2…

[补题记录] Atcoder Beginner Contest 308(C~E)

URL&#xff1a;https://atcoder.jp/contests/abc308 目录 C Problem/题意 Thought/思路 Code/代码 D Problem/题意 Thought/思路 Code/代码 E Problem/题意 Thought/思路 Code/代码 C Problem/题意 给出n个&#xff08;a&#xff0c;b&#xff09;数对&#xff…

短视频矩阵系统源代码开发搭建分享--代码开源SaaS

一、什么是短视频矩阵系统&#xff1f; 短视频矩阵系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案&#xff0c;具体包含&#xff1a;点赞关注评论主动私信 &#xff0c;评论区回复&#xff0c;自动潜客户挖掘&#xff0c;矩阵号营销&#x…

H3C ER G2系列路由器敏感信息泄露漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品介绍 H3C ER2200G2是H3C推出的新一代高性能企业级路由器&#…

【Vue】模板语法,事件处理器及综合案例、自定义组件、组件通信

一、事件处理器 我们之前事件监听可以使用v-on 指令 1、事件修饰符 在Vue中我们通过由点(.)表示的指令后缀来调用修饰符&#xff0c;比如&#xff1a; .stop&#xff1a;阻止事件冒泡。当事件触发时&#xff0c;该修饰符将停止事件进一步冒泡到父元素。相当于调用了 event.stop…