This tutorial explains how to design sketch and canvas in react native application. This is very helpful for drawing, designing layout and capturing the user signature in android or iOS application with help of react native application. This React Native component for drawing by touching support on both iOS and Android.
Lets see the below features of react-native-sketch-canvas.
Step-5: if you like to store or save the canvas in android device, then click on save button. We are using android emulator for this demo and in order to see the file location we need to open device file explorer in android studio.Once you click on save button, it will store the canvas in below location in your android device :
Storage location : /storage/emulated/0/Pictures/RNSketchCanvas
Download Link :
https://github.com/skptricks/React-Native/tree/master/React%20Native%20Sketch%20Canvas%20Android%20Or%20IOS%20Example
This is all about React Native Sketch Canvas Android or IOS Example. Thank you for reading this article, and if you have any problem, have a another better useful solution about this article, please write message in the comment section.
Lets see the below features of react-native-sketch-canvas.
- Support iOS and Android
- Stroke thickness and color are changable while drawing.
- Can undo strokes one by one.
- Can serialize path data to JSON. So it can sync other devices or someone else and continue to edit.
- Save drawing to a non-transparent image (png or jpg) or a transparent image (png only)
- Use vector concept. So sketches won't be cropped in different sizes of canvas.
- Support translucent colors and eraser.
- Support drawing on an image (Thanks to diego-caceres-galvan)
- High performance
- Can draw multiple canvases in the same screen.
- Can draw multiple multiline text on canvas.
Custom Drawing with Canvas :
Lets see the below example that helps to build more understanding to create a simple drawing canvas in react native application.
Step-1 : Create a new react native project, if you don’t know how to create a new project in react native just follow this tutorial.
Step-2 : Install the react-native-sketch-canvas package in your React Native project.
npm install @terrylinla/react-native-sketch-canvas --save
Screenshots after successful installation.
Step-3 : Link all native dependencies:
react-native link @terrylinla/react-native-sketch-canvas
NOTE : No additional steps are required for iOS.
Step-4: Open App.js in your favourite code editor and erase all code and follow this tutorial.
Step-5: Lets place the below lines of code in your App component. Make sure all the mandatory dependencies should present in the App component.
import React, { Component } from 'react'; import { Platform, StyleSheet, Text, View, Alert, } from 'react-native'; import RNSketchCanvas from '@terrylinla/react-native-sketch-canvas'; export default class App extends Component { render() { return ( <View style={styles.container}> <View style={{ flex: 1, flexDirection: 'row' }}> <RNSketchCanvas containerStyle={{ backgroundColor: 'transparent', flex: 1 }} canvasStyle={{ backgroundColor: 'transparent', flex: 1 }} defaultStrokeIndex={0} defaultStrokeWidth={5} closeComponent={<View style={styles.functionButton}><Text style={{color: 'white'}}>Close</Text></View>} undoComponent={<View style={styles.functionButton}><Text style={{color: 'white'}}>Undo</Text></View>} clearComponent={<View style={styles.functionButton}><Text style={{color: 'white'}}>Clear</Text></View>} eraseComponent={<View style={styles.functionButton}><Text style={{color: 'white'}}>Eraser</Text></View>} strokeComponent={color => ( <View style={[{ backgroundColor: color }, styles.strokeColorButton]} /> )} strokeSelectedComponent={(color, index, changed) => { return ( <View style={[{ backgroundColor: color, borderWidth: 2 }, styles.strokeColorButton]} /> ) }} strokeWidthComponent={(w) => { return (<View style={styles.strokeWidthButton}> <View style={{ backgroundColor: 'white', marginHorizontal: 2.5, width: Math.sqrt(w / 3) * 10, height: Math.sqrt(w / 3) * 10, borderRadius: Math.sqrt(w / 3) * 10 / 2 }} /> </View> )}} saveComponent={<View style={styles.functionButton}><Text style={{color: 'white'}}>Save</Text></View>} savePreference={() => { return { folder: 'RNSketchCanvas', filename: String(Math.ceil(Math.random() * 100000000)), transparent: false, imageType: 'png' } }} //onSketchSaved={(success, filePath) => { alert('filePath: ' + filePath); }} /> </View> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', }, headerText: { fontSize: 20, textAlign: "center", margin: 10, fontWeight: "bold" }, strokeColorButton: { marginHorizontal: 2.5, marginVertical: 8, width: 30, height: 30, borderRadius: 15, }, strokeWidthButton: { marginHorizontal: 2.5, marginVertical: 8, width: 30, height: 30, borderRadius: 15, justifyContent: 'center', alignItems: 'center', backgroundColor: '#39579A' }, functionButton: { marginHorizontal: 2.5, marginVertical: 8, height: 30, width: 60, backgroundColor: '#39579A', justifyContent: 'center', alignItems: 'center', borderRadius: 5, } });
Step-5: if you like to store or save the canvas in android device, then click on save button. We are using android emulator for this demo and in order to see the file location we need to open device file explorer in android studio.Once you click on save button, it will store the canvas in below location in your android device :
Storage location : /storage/emulated/0/Pictures/RNSketchCanvas
Screenshots :
https://github.com/skptricks/React-Native/tree/master/React%20Native%20Sketch%20Canvas%20Android%20Or%20IOS%20Example
This is all about React Native Sketch Canvas Android or IOS Example. Thank you for reading this article, and if you have any problem, have a another better useful solution about this article, please write message in the comment section.
Hi Sir, I am not able to save the image...How can I do that?
ReplyDeleteYou need to use onSketchSaved props in RNSketchCanvas component, in which apply the below line of code.
DeleteonSketchSaved={(success, filePath) => { alert('filePath: ' + filePath); }}
Hi. Congratulations and thanks for your tutorials. Thanks to them we can learn things like me.
ReplyDeleteMy name is Miguel Espeso and I am now starting to create with React Native, so I am a newbie.
Well, I have the problem described in the previous question. I personally am running the project in an emulator, with the command react-native run-android, but I can not find where the created drawings are saved.
I do not know what file I must create or modify in order to save the drawings, either in the emulator or in my mobile device, which is where I want to have the application.
I have a little warning in the emulator that says the following:
Accessing view manager configs directly off UIManager via UIManager [RNSketchCanvas]
is no longer supported.
Use UIManager getViewManagerConfig ('RNSketchCanvas') instead.
If you could help me with this, what file should I edit or what file should I create, I would be very grateful.
Even so, I will continue studying the RNSketchCanvas documentation. to try to give more functionality to the application and be able to erase what you draw and write.
Thank you for your contribution, greetings.
You need to use onSketchSaved props in RNSketchCanvas component, in which apply the below line of code.
ReplyDeleteonSketchSaved={(success, filePath) => { alert('filePath: ' + filePath); }}
and follow the step number 5 of this tutorial.
Thanks for your reply.
DeleteI'm not sure if what I should do is change the following line:
// onSketchSaved = {(success, filePath) => {alert ('filePath:' + filePath); }}
for this other line:
onSketchSaved = {(success, filePath) => {alert ('filePath:' + filePath); }}
Should I just delete the comment or should I add more code? ?
Thank you.
Hi, congratulations for your work.
ReplyDeleteI followed the tutorial and can not find a way to change the text size of the buttons.
Could you help me with this?
I have changed the value in the following code, but I can not change the size of the text, so the text does not fit on the button and extends in two lines on the buttons and is very ugly.
How can I reduce the text size of the buttons?
I'm working on Android
Thank you
headerText: {
fontSize: 5,
textAlign: "center",
margin: 10,
fontWeight: "bold"
}
Hi, congratulations for your work.
ReplyDeleteI followed the tutorial and can not find a way to change the text size of the buttons.
Could you help me with this?
I have changed the value in the following code, but I can not change the size of the text, so the text does not fit on the button and extends in two lines on the buttons and is very ugly.
How can I reduce the text size of the buttons?
I'm working on Android
Thank you
headerText: {
fontSize: 5,
textAlign: "center",
margin: 10,
fontWeight: "bold"
}
if you want to change button size, color etc. then you need to modify closeComponent, undoComponent, clearComponent, eraseComponent props of your code.
ReplyDeleteThanks for your support.
DeleteI added 'fontSize: 5' to the function styles: 'functionButton' but the text remains the same, it does not change the size.
Thanks, I will continue looking for a way to correct this.
how to save to db by fetch?
ReplyDeleteI'm getting "Invariant Violation: Invariant Violation: requireNativeComponent: "RNSketchCanvas" was not found in the UIManager" Error
ReplyDeleteE:\Canvas\canvas>react-native link @terrylinla/react-native-sketch-canvas
ReplyDelete'react-native' is not recognized as an internal or external command,
operable program or batch file.
I'm getting this error after running the sond command.