React Native 二維碼掃描組件

来源:http://www.cnblogs.com/gdsblog/archive/2017/08/14/7360343.html
-Advertisement-
Play Games

學rn得朋友們,你們知道rn開源項目嗎?來吧看這裡:http://www.marno.cn/(rn開源項目) React Native學習之路(9) - 註冊登錄驗證的實現 + (用Fetch實現post請求) + (倒計時驗證碼)+(父子組件通信)+(asyncStorage非同步存儲) +(Tex ...




 

學rn得朋友們,你們知道rn開源項目嗎?來吧看這裡:http://www.marno.cn/(rn開源項目)

React Native學習之路(9) - 註冊登錄驗證的實現 + (用Fetch實現post請求) + (倒計時驗證碼)+(父子組件通信)+(asyncStorage非同步存儲) +(TextInput文本輸入框):http://www.jianshu.com/p/7c81e122276b

 

ReactNative學習筆記七之圖表組件交互(上):http://www.jianshu.com/p/b103a83d7840

 

React Native之ListView實現九宮格效果 :http://blog.csdn.net/xiangzhihong8/article/details/53572824

 

1.前言

最近用 React Native 仿寫了一下 ofo 應用,涉及到了二維碼掃描的功能,在 github 上搜了一下,也沒發現一個趁手的二維碼掃描組件,所以乾脆自己動手寫了一個。

其中使用攝像頭實時掃描二維碼進行解析的功能,已經通過 react-native-camera 這個庫實現了,所以我也只是寫了一個可以自定義樣式的掃描界面,為了使用方便,我已經將其封裝成組件,上傳到了 NPM 伺服器,下麵就大概說一下實現過程以及使用方法。

2.特性

  • 相容 RN0.4.0+ 的版本
  • 相容 Android 和 iOS 平臺
  • 支持二維碼、條形碼掃描
  • 輕鬆實現各種掃描界面

3.截圖預覽

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(
            <Text
                style={{color:'white',textAlignVertical:'center', textAlign:'center',font:20,padding:12}}
            >這裡添加標題</Text>
        );
    }

    _renderMenu() {
        return (
            <Text
                style={{color:'white',textAlignVertical:'center', textAlign:'center',font:20,padding:12}}
            >這裡添加底部菜單</Text>
        )
    }

    barcodeReceived(e) {
        Toast.show('Type: ' + e.type + '\nData: ' + e.data);
        //console.log(e)
    }
}

6.屬性列表

屬性名類型預設值可選描述
maskColor string 0000004D true 遮罩顏色
borderColor string 000000 true 邊框顏色
cornerColor string 000000 true 轉角顏色
borderWidth number 0 true 邊框寬度
cornerBorderWidth number 4 true 轉角寬度
cornerBorderLength number 20 true 轉角長度
rectHeight number 200 true 掃描狂高度
rectWidth number 200 true 掃描狂寬度
isCornerOffset bool false true 轉角是否偏移
cornerOffsetSize number 0 true 轉角偏移量
bottomMenuHeight number 0 true 底部操作菜單高度
scanBarAnimateTime number 2500 true 掃描線移動速度
scanBarColor string 22ff00 true 掃描線顏色
scanBarImage any null true 使用圖片掃描線
scanBarHeight number 1.5 true 掃描線高度
scanBarMargin number 6 true 掃描線距掃描狂邊距
hintText string 將二維碼/條碼放入框內,即可自動掃描 true 提示文本
hintTextStyle object { color: ‘#fff’, fontSize: 14,backgroundColor:’transparent’} true 提示文字樣式
hintTextPosition number 130 true 提示文字位置
isShowScanBar bool true true 是否顯示掃描條
bottomMenuStyle object - true 底部菜單樣式
renderTopBarView func - flase 繪製頂部操作條組件
renderBottomMenuView func - false 繪製底部操作條組件
onScanResultReceived func - false

 

 

 

 

 

7.實現簡述

掃描界面可以分為 4 個部分:頂部標題欄,底部操作欄,遮罩層,掃描框。其中頂部標題欄和底部操作欄都是通過暴露方法讓用戶自己添加的。只有遮罩層和掃描框是傳入參數進行設置的。上一張圖大概說一下整個界面結構。

 

 

組件代碼結構如下,基本是通過使用絕對定位的 View 實現的佈局

<View>
    <Camera>
        {/*頂部標題欄*/}
        <TopBarView />

        <View>
            {/*掃描框部分*/}
            <View>
                {/*掃描框邊線*/}
                <View>
                    {/*掃描條及動畫*/}
                    <Animated.View>
                </View>

                {/*掃描框轉角-左上*/}
                <View />
                {/*掃描框轉角-右上*/}
                <View />
                {/*掃描框轉角-左下*/}
                <View />
                {/*掃描框轉角-右下*/}
                <View />
            </View>

            {/*遮罩-上*/}
            <View />
            {/*遮罩-左*/}
            <View />
            {/*遮罩-右*/}
            <View />
            {/*遮罩-下*/}
            <View />

            {/*提示文字*/}
           <HintTextView />
        </View>

        {/*底部操作欄*/}
        <BottomMenuView>
    </Camera>
</View>

 



詳細代碼比較長,就不一一列出來解釋了。主要也比較簡單,感覺沒啥好說的,就是通過計算組件在屏幕上的坐標位置,進行對應的大小設置而已。感興趣的可以直接跳轉到 github 去看,地址在這裡:https://github.com/MarnoDev/AC-QRCode-RN

順便提醒一下,因為目前還沒有進行優化,所以打開掃碼界面的速度感覺會有一些慢,後面有時間會對這些細節進行優化的,具體可以關註我的公眾號獲取,或者留意下後面我在 github 倉庫的更新。

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在實際開發開發中我們會用到各種瀏覽器、HTML、JS等提供的原生的組件/介面,但是這樣並不一定滿足我們的要求,所以我們需要自己寫一些我們需要的組件。 平常我們會經常用`select` 標簽做下拉選項,不過這個只能選擇不能手動輸入,當然網上也有很強大的select2插件,如果只要輸入和選擇兩個功能的話 ...
  • 原文鏈接 http://www.cnblogs.com/ouyangping/p/6439939.html jQuery對象與DOM對象是不一樣的 通過一個簡單的例子,簡單區分下jQuery對象與DOM對象: 通過一個簡單的例子,簡單區分下jQuery對象與DOM對象: <p id=”imooc”> ...
  • 關於Egret模塊化開發 vip系統 目錄 關於Egret模塊化開發 vip系統... 1 前言... 1 一,搭建界面... 1 二,建立數據模型... 3 1)數據模型的搭建: 3 2)數據的建立... 4 3)數據的增刪改查... 7 三.做交互, 7 結束... 8 前言 做游戲就是做數據, ...
  • import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Join; import jav... ...
  • 閉包不是魔法 這篇文章使用一些簡單的代碼例子來解釋JavaScript閉包的概念,即使新手也可以輕鬆參透閉包的含義。 其實只要理解了核心概念,閉包並不是那麼的難於理解。但是,網上充斥了太多學術性的文章,對於新手來說,看完這些文章可能會更加一頭霧水。 這篇文章面向的是使用主流開發語言的程式員,如果你能 ...
  • p:first-child { background-color: pink; width: 150px; line-height: 28px; font-size: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowr ...
  • 對於CSS 3.0,它對於我們Web設計人員來說不只是新奇的技術,更重要的是這些全新概念的Web應用給我們的設計開發提高了效率以及更多的無限可能性,我們將不必再依賴圖片或者 Javascript 去完成圓角、塊/文字陰影、漸變、透明度等提高Web設計質量的特色應用。 由於CSS3的新特性較多,所以w ...
  • Web Components是什麼 Web Components是一個聚集html,css,js的一個可復用組件。 這樣開發者就可以在網路上通過插件或組件的形式分享自己的代碼片段(具有獨立的功能),也可以理解成web組件或插件。 Web Components的組成要素 自定義元素 html模版 sh ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...