The Wayback Machine - https://web.archive.org/web/20200716050817/https://github.com/moaazsidat/react-native-qrcode-scanner/issues/115
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom Qr Code Scanner #115

Open
alz10 opened this issue Jun 30, 2018 · 9 comments
Open

Custom Qr Code Scanner #115

alz10 opened this issue Jun 30, 2018 · 9 comments

Comments

@alz10
Copy link

@alz10 alz10 commented Jun 30, 2018

I just wanna share my custom Qr Code Scanner with scanBar that animates up and down

screenshot_2018-06-30-13-47-32-453_com qrcodeattendance

You need to install this first (Google them because their installation requires linking)

react-native-vector-icons
react-native-animatable

Just change the color, size of the following depending on your needs

const overlayColor = "rgba(0,0,0,0.5)"; // this gives us a black color with a 50% transparency

const rectDimensions = SCREEN_WIDTH * 0.65; // this is equivalent to 255 from a 393 device width
const rectBorderWidth = SCREEN_WIDTH * 0.005; // this is equivalent to 2 from a 393 device width
const rectBorderColor = "#fff";

const scanBarWidth = SCREEN_WIDTH * 0.46; // this is equivalent to 180 from a 393 device width
const scanBarHeight = SCREEN_WIDTH * 0.0025; //this is equivalent to 1 from a 393 device width
const scanBarColor = "red";  

const iconScanColor = "#fff";

Full Code

import React, { Component } from "react";

import { View, Dimensions, Text } from "react-native";
import QRCodeScanner from "react-native-qrcode-scanner";
import Icon from "react-native-vector-icons/Ionicons";
import * as Animatable from "react-native-animatable";

const SCREEN_HEIGHT = Dimensions.get("window").height;
const SCREEN_WIDTH = Dimensions.get("window").width;

console.disableYellowBox = true;

class QrCodeCamera extends Component {
  onSuccess(e) {
    alert(e);
  }

  makeSlideOutTranslation(translationType, fromValue) {
    return {
      from: {
        [translationType]: SCREEN_WIDTH * -0.18
      },
      to: {
        [translationType]: fromValue
      }
    };
  }

  render() {
    return (
      <QRCodeScanner
        showMarker
        onRead={this.onSuccess.bind(this)}
        cameraStyle={{ height: SCREEN_HEIGHT }}
        customMarker={
          <View style={styles.rectangleContainer}>
            <View style={styles.topOverlay}>
              <Text style={{ fontSize: 30, color: "white" }}>
                QR CODE SCANNER
              </Text>
            </View>

            <View style={{ flexDirection: "row" }}>
              <View style={styles.leftAndRightOverlay} />

              <View style={styles.rectangle}>
                <Icon
                  name="ios-qr-scanner"
                  size={SCREEN_WIDTH * 0.73}
                  color={iconScanColor}
                />
                <Animatable.View
                  style={styles.scanBar}
                  direction="alternate-reverse"
                  iterationCount="infinite"
                  duration={1700}
                  easing="linear"
                  animation={this.makeSlideOutTranslation(
                    "translateY",
                    SCREEN_WIDTH * -0.54
                  )}
                />
              </View>

              <View style={styles.leftAndRightOverlay} />
            </View>

            <View style={styles.bottomOverlay} />
          </View>
        }
      />
    );
  }
}

const overlayColor = "rgba(0,0,0,0.5)"; // this gives us a black color with a 50% transparency

const rectDimensions = SCREEN_WIDTH * 0.65; // this is equivalent to 255 from a 393 device width
const rectBorderWidth = SCREEN_WIDTH * 0.005; // this is equivalent to 2 from a 393 device width
const rectBorderColor = "red";

const scanBarWidth = SCREEN_WIDTH * 0.46; // this is equivalent to 180 from a 393 device width
const scanBarHeight = SCREEN_WIDTH * 0.0025; //this is equivalent to 1 from a 393 device width
const scanBarColor = "#22ff00";

const iconScanColor = "blue";

const styles = {
  rectangleContainer: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center",
    backgroundColor: "transparent"
  },

  rectangle: {
    height: rectDimensions,
    width: rectDimensions,
    borderWidth: rectBorderWidth,
    borderColor: rectBorderColor,
    alignItems: "center",
    justifyContent: "center",
    backgroundColor: "transparent"
  },

  topOverlay: {
    flex: 1,
    height: SCREEN_WIDTH,
    width: SCREEN_WIDTH,
    backgroundColor: overlayColor,
    justifyContent: "center",
    alignItems: "center"
  },

  bottomOverlay: {
    flex: 1,
    height: SCREEN_WIDTH,
    width: SCREEN_WIDTH,
    backgroundColor: overlayColor,
    paddingBottom: SCREEN_WIDTH * 0.25
  },

  leftAndRightOverlay: {
    height: SCREEN_WIDTH * 0.65,
    width: SCREEN_WIDTH,
    backgroundColor: overlayColor
  },

  scanBar: {
    width: scanBarWidth,
    height: scanBarHeight,
    backgroundColor: scanBarColor
  }
};

export default QrCodeCamera;

@jiangdi0924
Copy link

@jiangdi0924 jiangdi0924 commented Jul 12, 2018

it's awsome!!!

@moaazsidat
Copy link
Owner

@moaazsidat moaazsidat commented Aug 15, 2018

@Albert0405 this is awesome! we should definitely add this as part of the examples!

@smrd1377
Copy link

@smrd1377 smrd1377 commented Dec 5, 2018

Amazing 💃 it work correctly ... i love it
tnq very much 💯

@dramalcolm
Copy link

@dramalcolm dramalcolm commented Jan 15, 2019

nice, i like it

@MebDevelop
Copy link

@MebDevelop MebDevelop commented Feb 19, 2019

Can you provide code when orientation is landscape

@eduardodcastro
Copy link

@eduardodcastro eduardodcastro commented Mar 26, 2019

I am developing a project, which uses qr code reader, your project helped me a lot in the development of the layout of this screen, I leave here my congratulations and thank you.
Eduardo / Brazil

@MttNajafi
Copy link

@MttNajafi MttNajafi commented Jun 7, 2019

how to scan just only the center small area? When we have 2 QR code on the screen, the first one without need to go to the center area is scanned!

@sharadkatre19
Copy link

@sharadkatre19 sharadkatre19 commented Oct 23, 2019

Nice!! It's Amazing, Thanks!!@:D

@motogod
Copy link

@motogod motogod commented Apr 9, 2020

Thanks for sharing the code.

But I found an issue it happens on

<View style={styles.bottomOverlay}>
  <TouchableOpacity onPress={() => alert('bottom)}><Text>Click</Text></TouchableOpacity></View>

onPress function won't trigger on Android. ( iOS is working )

I have no idea why.

If just test a code like this it's still not working with yellow background.

<QRCodeScanner
        showMarker
        onRead={onSuccess}
        cameraStyle={{ height: qrCodeHeight }}
        customMarker={
          <View style={styles.rectangleContainer}>
            <View style={{ flex: 1, backgroundColor: 'pink' }} onStartShouldSetResponder={() => alert('1')}><Text style={{ fontSize: 32 }}>1</Text></View>
            <View style={{ flex: 1, backgroundColor: 'blue' }} onStartShouldSetResponder={() => alert('2')}><Text style={{ fontSize: 32 }}>2</Text></View>
            <View style={{ flex: 1, backgroundColor: 'yellow' }} onStartShouldSetResponder={() => alert('3')}><Text style={{ fontSize: 32 }}>3</Text></View>
          </View>
        }
      />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.