React Native 基于react-native-camera实现扫码功能
组件库文档: https://github.com/react-nati... 安装
使用最新的稳定版,将你的package.json这样配置: 配置(IOS)如果上一步的link显示成功,则xcode里的配置基本完成,如果失败,可以手动配置; 手动配置1.你已经完成
使用只需 引用标签: <RNCamera ref={ref => { this.camera = ref; }} style={styles.preview} type={RNCamera.Constants.Type.back} flashMode={RNCamera.Constants.FlashMode.on} onBarCodeRead={this.onBarCodeRead} > </RNCamera> 属性autoFocus值:(RNCamera.Constants.AutoFocus.on默认)或RNCamera.Constants.AutoFocus.off 使用该autoFocus属性指定相机的自动对焦设置。 flashMode指定相机的闪光模式 onBarCodeRead检测到条形码时,将调用指定的方法; 绘制扫码界面代码: render() { return ( <View style={styles.container}> <RNCamera ref={ref => { this.camera = ref; }} style={styles.preview} type={RNCamera.Constants.Type.back} flashMode={RNCamera.Constants.FlashMode.on} onBarCodeRead={this.onBarCodeRead} > <View style={styles.rectangleContainer}> <View style={styles.rectangle}/> <Animated.View style={[ styles.border,{transform: [{translateY: this.state.moveAnim}]}]}/> <Text style={styles.rectangleText}>将二维码放入框内,即可自动扫描</Text> </View> </RNCamera> </View> ); } 在 Camera 组件中绘制一个绿色的正方形 View,随后就是绘制绿色方框中滚动的线。使用 RN 中的 Animated 组件来实现动画效果。 首先在 componentDidMount 函数中初始化动画函数。 componentDidMount() { this.startAnimation(); } startAnimation = () => { this.state.moveAnim.setValue(0); Animated.timing( this.state.moveAnim,{ toValue: -200,duration: 1500,easing: Easing.linear } ).start(() => this.startAnimation()); }; 并且记得在构造函数中初始化 state: constructor(props) { super(props); this.state = { moveAnim: new Animated.Value(0) }; } 通过 onBarCodeRead 函数来处理扫描结果: // 识别二维码 onBarCodeRead = (result) => { const { navigate } = this.props.navigation; const {data} = result; //只要拿到data就可以了 //路由跳转到webView页面; navigate('Sale',{ url: data }) }; 完整版示例: class ScanScreen extends Component { constructor(props) { super(props); this.state = { moveAnim: new Animated.Value(0) }; } componentDidMount() { this.startAnimation(); } startAnimation = () => { this.state.moveAnim.setValue(0); Animated.timing( this.state.moveAnim,{ toValue: -200,easing: Easing.linear } ).start(() => this.startAnimation()); }; // 识别二维码 onBarCodeRead = (result) => { const { navigate } = this.props.navigation; const {data} = result; navigate('Sale',{ url: data }) }; render() { return ( <View style={styles.container}> <RNCamera ref={ref => { this.camera = ref; }} style={styles.preview} type={RNCamera.Constants.Type.back} flashMode={RNCamera.Constants.FlashMode.on} onBarCodeRead={this.onBarCodeRead} > <View style={styles.rectangleContainer}> <View style={styles.rectangle}/> <Animated.View style={[ styles.border,{transform: [{translateY: this.state.moveAnim}]}]}/> <Text style={styles.rectangleText}>将二维码放入框内,即可自动扫描</Text> </View> </RNCamera> </View> ); } } export default ScanScreen; const styles = StyleSheet.create({ container: { flex: 1,flexDirection: 'row' },preview: { flex: 1,justifyContent: 'flex-end',alignItems: 'center' },rectangleContainer: { flex: 1,alignItems: 'center',justifyContent: 'center',backgroundColor: 'transparent' },rectangle: { height: 200,width: 200,borderWidth: 1,borderColor: '#00FF00',rectangleText: { flex: 0,color: '#fff',marginTop: 10 },border: { flex: 0,height: 2,backgroundColor: '#00FF00',} }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |