博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React Native 二维码扫描组件(简单,易用!)
阅读量:4085 次
发布时间:2019-05-25

本文共 3356 字,大约阅读时间需要 11 分钟。

摘要:最近用 React Native 仿写了一下 ofo 应用,涉及到了二维码扫描的功能,在 github 上搜了一下,也没发现一个趁手的二维码扫描组件,所以干脆自己动手写了一个。其中使用摄像头实时扫描二维码进行解析的功能,已经通过 react-native-camera 这个库实现了,所以我也只是写了一个可以自定义样式的扫描界面,为了使用方便,我已经将其封装成组件,上传到了 NPM 服务器,下面就大概说一下实现过程以及使用方法。
https://sdk.cn/news/7060

1前言

最近用 React Native 仿写了一下 ofo 应用,涉及到了二维码扫描的功能,在 github 上搜了一下,也没发现一个趁手的二维码扫描组件,所以干脆自己动手写了一个。

其中使用摄像头实时扫描二维码进行解析的功能,已经通过 react-native-camera 这个库实现了,所以我也只是写了一个可以自定义样式的扫描界面,为了使用方便,我已经将其封装成组件,上传到了 NPM 服务器,下面就大概说一下实现过程以及使用方法。

2特性

  • 兼容 RN0.4.0+ 的版本

  • 兼容 Android 和 iOS 平台

  • 支持二维码、条形码扫描

  • 轻松实现各种扫描界面

3截图预览

1707-0.jpg.gif


Twitter

1708-640.jpg.jpg

WeChat

1709-640.jpg.jpg

QQBrowser

1710-640.jpg.jpg

ofo

1711-640.jpg.jpg


4安装

//第一步
npm install ac-qrcode --save
//第二步(react-native-camera 需要 link 后才能使用)
react-native link
PS:如果 link 没有成功,会报错。如果没有自动 link,可以手动 link

5基本使用

import {QRScannerView} from 'ac-qrcode'; export default class DefaultScreen extends Component {
    render() {        return (            < QRScannerView                onScanResultReceived                        ={
this.barcodeReceived.bind(this)}                renderTopBarView                         ={
() => this._renderTitleBar()}                renderBottomMenuView                         ={
() =>  this._renderMenu()}            />        )    }    _renderTitleBar(){        return(            
这里添加标题
       );    }    _renderMenu() {        return (            
这里添加底部菜单
       )    }    barcodeReceived(e) {        Toast.show('Type: ' + e.type +             '\nData: ' + e.data);    }}

6基本属性

1712-640.jpg.jpg


属性名 默认值 描述
maskColor #0000004D 遮罩颜色
borderColor #000000 边框颜色
cornerColor #000000 转角颜色
borderWidth 0 边框宽度
cornerBorderWidth 4 转角宽度
cornerBorderLength 20 转角长度
rectHeight 200 扫描狂高度
rectWidth 200 扫描狂宽度
isCornerOffset false 转角是否偏移
cornerOffsetSize 0 转角偏移量
bottomMenuHeight 0 底部操作菜单高度
scanBarAnimateTime 2500 扫描线移动速度
scanBarColor #22ff00 扫描线颜色
scanBarImage null 使用图片扫描线
scanBarHeight 1.5 扫描线高度
scanBarMargin 6 扫描线距扫描狂边距
hintText 将二维码/条码放入框内,即可自动扫描 提示文本
hintTextStyle { color: '#fff', 
fontSize: 14,

backgroundColor:

'transparent'}

提示文字样式
hintTextPosition 130 提示文字位置
isShowScanBar true 是否显示扫描条
bottomMenuStyle - 底部菜单样式
renderTopBarView - 绘制顶部操作条组件
renderBottomMenuView - 绘制底部操作条组件
onScanResultReceived - 扫描结果回调

8实现简述

扫描界面可以分为 4 个部分:顶部标题栏,底部操作栏,遮罩层,扫描框。其中顶部标题栏和底部操作栏都是通过暴露方法让用户自己添加的。只有遮罩层和扫描框是传入参数进行设置的。上一张图大概说一下整个界面结构。

1713-640.jpg.jpg

组件代码结构如下,基本是通过使用绝对定位的 View 实现的布局

   
       {
/*顶部标题栏*/}        
       
           {
/*扫描框部分*/}            
               {
/*扫描框边线*/}                
                   {
/*扫描条及动画*/}                    
               
               {
/*扫描框转角-左上*/}                
               {
/*扫描框转角-右上*/}                
               {
/*扫描框转角-左下*/}                
               {
/*扫描框转角-右下*/}                
           
           {
/*遮罩-上*/}            
           {
/*遮罩-左*/}            
           {
/*遮罩-右*/}            
           {
/*遮罩-下*/}            
           {
/*提示文字*/}            
       
       {
/*底部操作栏*/}        
   

详细代码比较长,就不一一列出来解释了。主要也比较简单,感觉没啥好说的,就是通过计算组件在屏幕上的坐标位置,进行对应的大小设置而已。感兴趣的可以直接跳转到 github 去看,地址在这里:

顺便提醒一下,因为目前还没有进行优化,所以打开扫码界面的速度感觉会有一些慢,后面有时间会对这些细节进行优化的,具体可以关注我的公众号获取,或者留意下后面我在 github 仓库的更新。

转载地址:http://durni.baihongyu.com/

你可能感兴趣的文章
Leetcode 834. 树中距离之和 C++
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
分布式系统下的纠删码技术(一) -- Erasure Code (EC)
查看>>
RS(纠删码)技术浅析及Python实现
查看>>
RS纠删码
查看>>
reed solomon编码实践
查看>>
纠删码数据中心的最佳修复层:从理论到实践
查看>>
排队论---一般服务时间 M/G/1 模型
查看>>
为什么对高斯分布的方差的极大似然估计是有偏的?
查看>>
TensorFlow分布式采坑记
查看>>
【神经网络】变分自编码大杂烩
查看>>
为程序员写的Reed-Solomon码解释
查看>>
分布式系统下的纠删码技术之Erasure Code
查看>>
【NPC】23、有向汉密尔顿回路规约到无向汉密尔顿回路
查看>>
最小生成树的两种方法(Kruskal算法和Prim算法)
查看>>
2020-11-22
查看>>
2020-11-30
查看>>