{"id":13789021,"url":"https://github.com/xuexiangjys/XQRCode","last_synced_at":"2025-05-12T03:31:14.747Z","repository":{"id":53729918,"uuid":"132070132","full_name":"xuexiangjys/XQRCode","owner":"xuexiangjys","description":"A very convenient and practical qrcode scanning, analysis, generation library.(一个非常方便实用的二维码扫描、解析、生成库)","archived":false,"fork":false,"pushed_at":"2023-12-15T11:42:09.000Z","size":10556,"stargazers_count":193,"open_issues_count":8,"forks_count":39,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-12T04:19:34.124Z","etag":null,"topics":["android","qrcode-generator","qrcode-scanner","x-library","xui"],"latest_commit_sha":null,"homepage":"https://xuexiangjys.github.io/XQRCode/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xuexiangjys.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"custom":"https://github.com/xuexiangjys/Resource/blob/master/doc/sponsor.md"}},"created_at":"2018-05-04T01:39:01.000Z","updated_at":"2024-07-28T02:04:33.000Z","dependencies_parsed_at":"2024-01-19T16:09:59.543Z","dependency_job_id":"ed178f76-0ff3-494a-a7b6-26e38251aa61","html_url":"https://github.com/xuexiangjys/XQRCode","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexiangjys%2FXQRCode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexiangjys%2FXQRCode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexiangjys%2FXQRCode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexiangjys%2FXQRCode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xuexiangjys","download_url":"https://codeload.github.com/xuexiangjys/XQRCode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225117111,"owners_count":17423341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","qrcode-generator","qrcode-scanner","x-library","xui"],"created_at":"2024-08-03T21:00:57.601Z","updated_at":"2024-11-18T02:32:16.034Z","avatar_url":"https://github.com/xuexiangjys.png","language":"Java","funding_links":["https://github.com/xuexiangjys/Resource/blob/master/doc/sponsor.md"],"categories":["编解码"],"sub_categories":[],"readme":"# XQRCode\n[![](https://jitpack.io/v/xuexiangjys/XQRCode.svg)](https://jitpack.io/#xuexiangjys/XQRCode)\n[![api][apisvg]][api]\n[![I](https://img.shields.io/github/issues/xuexiangjys/XQRCode.svg)](https://github.com/xuexiangjys/XQRCode/issues)\n[![Star](https://img.shields.io/github/stars/xuexiangjys/XQRCode.svg)](https://github.com/xuexiangjys/XQRCode)\n\n一个非常方便实用的二维码扫描、解析、生成库\n\n## 关于我\n\n| 公众号   | 掘金     |  知乎    |  CSDN   |   简书   |   思否  |   哔哩哔哩  |   今日头条\n|---------|---------|--------- |---------|---------|---------|---------|---------|\n| [我的Android开源之旅](https://ss.im5i.com/2021/06/14/6tqAU.png)  |  [点我](https://juejin.im/user/598feef55188257d592e56ed/posts)    |   [点我](https://www.zhihu.com/people/xuexiangjys/posts)       |   [点我](https://xuexiangjys.blog.csdn.net/)  |   [点我](https://www.jianshu.com/u/6bf605575337)  |   [点我](https://segmentfault.com/u/xuexiangjys)  |   [点我](https://space.bilibili.com/483850585)  |   [点我](https://img.rruu.net/image/5ff34ff7b02dd)\n\n## 特点\n\n* 支持快速集成条形码、二维码扫描功能。\n* 支持自定义扫描界面。\n* 支持二维码多次扫描。\n* 支持生成带图标的二维码。\n* 支持生成带背景图片的复杂二维码。\n* 支持二维码解析功能\n\n## 1、演示（请star支持）\n\n![xqrcode.gif](https://ss.im5i.com/2021/07/09/gSwU2.gif)\n\n### Demo下载\n\n[![downloads](https://img.shields.io/badge/downloads-1.7M-blue.svg)](https://github.com/xuexiangjys/XQRCode/blob/master/apk/xqrcodedemo.apk?raw=true)\n\n![xqrcode_download.png](https://ss.im5i.com/2021/07/09/gShv7.png)\n\n## 2、如何使用\n目前支持主流开发工具AndroidStudio的使用，直接配置build.gradle，增加依赖即可.\n\n### 2.1、Android Studio导入方法，添加Gradle依赖\n\n1.先在项目根目录的 build.gradle 的 repositories 添加:\n```\nallprojects {\n     repositories {\n        ...\n        maven { url \"https://jitpack.io\" }\n    }\n}\n```\n\n2.然后在应用项目(一般是app)的 `build.gradle` 的 dependencies 添加:\n\n```\ndependencies {\n  ...\n   // 如果是androidx项目，使用1.1.0版本及以上\n  implementation 'com.github.xuexiangjys:XQRCode:1.1.1'\n   // 如果是support项目，请使用1.0.6版本\n  implementation 'com.github.xuexiangjys:XQRCode:1.0.6'\n}\n```\n\n### 2.2、二维码扫描\n\n#### 默认二维码扫描\n\n1.默认二维码扫描界面`CaptureActivity`\n\n使用`XQRCode.startScan`直接调取默认二维码扫描。\n\n```\nXQRCode.startScan(this, REQUEST_CODE);\n```\n\n2.二维码的扫描结果通过Intent返回出来：\n\n* `XQRCode.RESULT_TYPE`:扫描结果类型，`XQRCode.RESULT_SUCCESS`代表扫描成功，`XQRCode.RESULT_FAILED`代表扫描失败。\n* `XQRCode.RESULT_DATA`:扫描二维码的数据内容。\n\n3.自定义默认二维码扫描界面的主题样式：\n\n```\n\u003c!-- 自定义默认二维码扫描界面的主题. --\u003e\n\u003cstyle name=\"XQRCodeTheme.Custom\"\u003e\n    \u003citem name=\"ViewfinderViewStyle\"\u003e@style/ViewfinderView.Custom\u003c/item\u003e\n\u003c/style\u003e\n\n\u003cstyle name=\"ViewfinderView.Custom\"\u003e\n    \u003citem name=\"inner_corner_color\"\u003e#123456\u003c/item\u003e\n    \u003citem name=\"inner_corner_length\"\u003e50dp\u003c/item\u003e\n    \u003citem name=\"inner_corner_width\"\u003e5dp\u003c/item\u003e\n    \u003citem name=\"inner_scan_speed\"\u003e20dp\u003c/item\u003e\n    \u003citem name=\"inner_scan_isCircle\"\u003efalse\u003c/item\u003e\n\u003c/style\u003e\n```\n\n4.自定义默认二维码扫描界面的界面样式，重写相关方法：\n\n详细内容可参见[CustomCaptureActivity](https://github.com/xuexiangjys/XQRCode/blob/master/app/src/main/java/com/xuexiang/xqrcodedemo/activity/CustomCaptureActivity.java)\n\n```\n@Override\nprotected void beforeCapture() {\n//做二维码采集之前需要做的事情\n}\n\n@Override\nprotected void onCameraInitSuccess() {\n//相机初始化成功\n}\n\n@Override\nprotected void onCameraInitFailed() {\n//相机初始化失败\n}\n```\n\n\n下面的二维码扫描代码仅供参考：\n\n```\n/**\n * 开启二维码扫描\n */\n@Permission(CAMERA)\nprivate void startScan(ScanType scanType) {\n    switch (scanType) {\n        case DEFAULT:\n            XQRCode.startScan(this, REQUEST_CODE);\n            break;\n        case DEFAULT_Custom:\n            XQRCode.startScan(this, REQUEST_CODE, R.style.XQRCodeTheme_Custom);\n            break;\n        case REMOTE:\n            Intent intent = new Intent(XQRCode.ACTION_DEFAULT_CAPTURE);\n            startActivityForResult(intent, REQUEST_CODE);\n            break;\n        default:\n            break;\n    }\n}\n\n@Override\npublic void onActivityResult(int requestCode, int resultCode, Intent data) {\n    super.onActivityResult(requestCode, resultCode, data);\n    //处理二维码扫描结果\n    if (requestCode == REQUEST_CODE \u0026\u0026 resultCode == RESULT_OK) {\n        //处理扫描结果（在界面上显示）\n        handleScanResult(data);\n    }\n\n    //选择系统图片并解析\n    else if (requestCode == REQUEST_IMAGE) {\n        if (data != null) {\n            Uri uri = data.getData();\n            getAnalyzeQRCodeResult(uri);\n        }\n    }\n}\n\n/**\n * 处理二维码扫描结果\n * @param data\n */\nprivate void handleScanResult(Intent data) {\n    if (data != null) {\n        Bundle bundle = data.getExtras();\n        if (bundle != null) {\n            if (bundle.getInt(XQRCode.RESULT_TYPE) == XQRCode.RESULT_SUCCESS) {\n                String result = bundle.getString(XQRCode.RESULT_DATA);\n                ToastUtils.toast(\"解析结果:\" + result, Toast.LENGTH_LONG);\n            } else if (bundle.getInt(XQRCode.RESULT_TYPE) == XQRCode.RESULT_FAILED) {\n                ToastUtils.toast(\"解析二维码失败\", Toast.LENGTH_LONG);\n            }\n        }\n    }\n}\n\n/**\n * 进行二维码解析\n *\n * @param uri\n */\nprivate void getAnalyzeQRCodeResult(Uri uri) {\n    XQRCode.analyzeQRCode(PathUtils.getFilePathByUri(getContext(), uri), new QRCodeAnalyzeUtils.AnalyzeCallback() {\n        @Override\n        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {\n            ToastUtils.toast(\"解析结果:\" + result, Toast.LENGTH_LONG);\n        }\n\n        @Override\n        public void onAnalyzeFailed() {\n            ToastUtils.toast(\"解析二维码失败\", Toast.LENGTH_LONG);\n        }\n    });\n}\n```\n\n#### 自定义二维码扫描\n\n1. 自定义一个扫码界面布局。自定义的扫码界面需要定义一个`SurfaceView`和一个`ViewfinderView`，且id必须是`preview_view`和`viewfinder_view`。详情见如下布局代码：\n\n```\n\u003cFrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\u003e\n\n    \u003cSurfaceView\n        android:id=\"@+id/preview_view\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\" /\u003e\n\n    \u003ccom.xuexiang.xqrcode.view.ViewfinderView\n        android:id=\"@+id/viewfinder_view\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:inner_corner_color=\"@color/scan_corner_color\"\n        app:inner_corner_length=\"30dp\"\n        app:inner_corner_width=\"5dp\"\n        app:inner_marginTop=\"120dp\"\n        app:inner_scan_bitmap=\"@mipmap/ic_scan_image\"\n        app:inner_scan_isCircle=\"false\"\n        app:inner_scan_speed=\"10dp\"\n        app:inner_height=\"300dp\"\n        app:inner_width=\"300dp\" /\u003e\n\n\u003c/FrameLayout\u003e\n```\n\nViewfinderView属性表\n\n属性名 | 类型 | 默认值 | 备注\n:-|:-:|:-:|:-\ninner_width | dimension | 屏幕宽度的3／4 | 扫描框的宽度\ninner_height | dimension | 屏幕宽度的3／4 | 扫描框的高度\ninner_marginTop | dimension | 居中效果 | 扫描框距离顶部的距离\ninner_corner_color | color | #0DC2FE | 扫描框四角的颜色\ninner_corner_length | dimension | 32dp | 扫描框四角的长度\ninner_corner_width | dimension | 6dp | 扫描框四角的宽度\ninner_scan_bitmap | reference | R.drawable.xqrcode_ic_scan_light | 扫描控件图资源\ninner_scan_bitmap_tint | color | / | 扫描控件图资源的色调\ninner_scan_speed | dimension | 5dp | 扫描速度\ninner_scan_animation_interval | integer | 25 | 扫描动画绘制的间期，单位是ms\ninner_scan_isCircle | boolean | true | 小圆点是否展示\n\n\n2. 调用`XQRCode.getCaptureFragment`的方法，传入自定义扫描界面的布局ID，可以获得带扫描功能的Fragment-`CaptureFragment`，将其填充到页面中。\n\n```\n// 为二维码扫描界面设置定制化界面\nCaptureFragment captureFragment = XQRCode.getCaptureFragment(R.layout.layout_custom_camera);\ncaptureFragment.setAnalyzeCallback(analyzeCallback);\ngetChildFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();\n```\n\n3. 最后为CaptureFragment设置二维码解析回调接口`AnalyzeCallback`即可。\n\n#### 设置相机聚焦的间隔\n\n```\n//设置相机的自动聚焦间隔\nXQRCode.setAutoFocusInterval(1500L);\n```\n\n### 2.3、二维码生成\n\n1.简单的二维码生成\n\n调用`XQRCode.createQRCodeWithLogo`,传入二维码携带的内容、尺寸、图标即可生成二维码Bitmap。\n\n2.复杂的二维码生成\n\n调用`XQRCode.newQRCodeBuilder`可以获得二维码生成构建者。可设置的参数如下:\n\n* setContents: 设置二维码携带的内容\n* setSize: 设置二维码的尺寸\n* setMargin: 设置二维码的边缘宽度\n* setDataDotScale: 设置二维码的数据点缩放比例\n* setColorDark: 设置深色点（true-dots）色值\n* setColorLight: 设置浅色点（false-dots）色值\n* setBackgroundImage: 设置背景图案\n* setWhiteMargin: 设置是否是白色的边缘\n* setAutoColor: 设置是否自动从背景图案中选取色值\n* setBinarize: 设置是否（二值化）灰度化背景图案\n* setBinarizeThreshold: 设置二值化中值\n\n最后调用`build`方法即可生成二维码。\n\n### 2.4、二维码解析\n\n1.只需要解析二维码携带的数据内容，可直接调用`XQRCode.analyzeQRCode`方法，传入二维码的绝对路径即可。\n\n2.如果需要完整的二维码解析结果，可调用`XQRCode.getAnalyzeQRCodeResult`方法，传入二维码的绝对路径即可。\n\n## 混淆配置\n\n```\n-dontwarn com.google.zxing.**\n-keep class com.google.zxing.**{*;}\n```\n\n## 特别感谢\n\nhttps://github.com/yipianfengye/android-zxingLibrary\n\n## 如果觉得项目还不错，可以考虑打赏一波\n\n\u003e 你的打赏是我维护的动力，我将会列出所有打赏人员的清单在下方作为凭证，打赏前请留下打赏项目的备注！\n\n![pay.png](https://ss.im5i.com/2021/06/14/6twG6.png)\n\n## 公众号\n\n\u003e 更多资讯内容，欢迎扫描关注我的个人微信公众号:【我的Android开源之旅】\n\n![](https://ss.im5i.com/2021/06/14/65yoL.jpg)\n\n[apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg\n[api]: https://android-arsenal.com/api?level=14","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuexiangjys%2FXQRCode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxuexiangjys%2FXQRCode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuexiangjys%2FXQRCode/lists"}