Forked from: https://github.com/VGamezz19/react-native-sketch-draw
A React Native component for touch based drawing supporting iOS and Android. Inspired by the libraries react-native-sketch, react-native-signature-capture and react-native-sketch-view
This component was written to fulfill the following use cases:
- Basic Touch based drawing for both iOS and android.
- Shouldn't include any UI Elements for interaction. The UI Elements can be created and customized in react native.
- Support touch drawing, erasing of part of drawing, clearing drawing, saving of drawn images locally and opening of locally saved images.
You can change color with prop toolColor={'#color-CSS-Hexa'}.
- To install from this fork, add to package.json:
"react-native-sketch-draw": "github:cristianoccazinsp/react-native-sketch-draw" $ react-native link react-native-sketch-draw-- Not needed with RN >= 0.60
import React, { Component } from 'react';
import {
View,
Text,
TouchableHighlight
} from 'react-native';
import SketchDraw from 'react-native-sketch-draw';
const SketchDrawConstants = SketchDraw.constants;
const tools = {};
tools[SketchDrawConstants.toolType.pen.id] = {
id: SketchDrawConstants.toolType.pen.id,
name: SketchDrawConstants.toolType.pen.name,
nextId: SketchDrawConstants.toolType.eraser.id
};
tools[SketchDrawConstants.toolType.eraser.id] = {
id: SketchDrawConstants.toolType.eraser.id,
name: SketchDrawConstants.toolType.eraser.name,
nextId: SketchDrawConstants.toolType.pen.id
};
export default class DrawBoard extends Component {
constructor(props) {
super(props);
this.state = {
color: '#FFFFFF',
toolSelected: SketchDrawConstants.toolType.pen.id
};
}
isEraserToolSelected() {
return this.state.toolSelected === SketchDrawConstants.toolType.eraser.id;
}
toolChangeClick() {
this.setState({toolSelected: tools[this.state.toolSelected].nextId});
}
getToolName() {
return tools[this.state.toolSelected].name;
}
onSketchSave(saveEvent) {
this.props.onSave && this.props.onSave(saveEvent);
}
render() {
return (
<View style={{flex: 1, flexDirection: 'column'}}>
<SketchDraw style={{flex: 1, backgroundColor: 'white'}} ref="sketchRef"
selectedTool={this.state.toolSelected}
toolColor={'#FFFA38'} //Yelow Example! you can changIT!
onSaveSketch={this.onSketchSave.bind(this)}
localSourceImagePath={this.props.localSourceImagePath}/>
<View style={{ flexDirection: 'row', backgroundColor: '#EEE'}}>
<TouchableHighlight underlayColor={"#CCC"} style={{ flex: 1, alignItems: 'center', paddingVertical:20 }} onPress={() => { this.refs.sketchRef.clearSketch() }}>
<Text style={{color:'#888',fontWeight:'600'}}>CLEAR</Text>
</TouchableHighlight>
<TouchableHighlight underlayColor={"#CCC"} style={{ flex: 1, alignItems: 'center', paddingVertical:20, borderLeftWidth:1, borderRightWidth:1, borderColor:'#DDD' }} onPress={() => { this.refs.sketchRef.saveSketch() }}>
<Text style={{color:'#888',fontWeight:'600'}}>SAVE</Text>
</TouchableHighlight>
<TouchableHighlight underlayColor={"#CCC"} style={{ flex: 1, justifyContent:'center', alignItems: 'center', backgroundColor:this.isEraserToolSelected() ? "#CCC" : "rgba(0,0,0,0)" }} onPress={this.toolChangeClick.bind(this)}>
<Text style={{color:'#888',fontWeight:'600'}}>ERASER</Text>
</TouchableHighlight>
</View>
</View>
);
}
}clearSketch()- Clears the view.undo()- Undos the last operation. Calling this with a pre-loaded image and an empty stack will also clear itsaveSketch(format, quality)- Initiates saving of sketch.format:JPEGorPNG(default)quality: value from 1 to 100 for compressioncommitSketch()- for tools (e.g., Text) that must be manually committed to apply changes. Note that switching tools will also commitpromptData()- for tools that need data, prompts for input
- Pen -
SketchDraw.constants.toolType.pen - Eraser -
SketchDraw.constants.toolType.eraser - Rectangle -
SketchDraw.constants.toolType.rectangle - Arrow -
SketchDraw.constants.toolType.arrow - Text -
SketchDraw.constants.toolType.text- can prompt for input, and has to be committed
selectedTool- Set the tool id to be selected.- Tool Id can be found using SketchDraw tooltype constants eg.
SketchDraw.constants.toolType.pen.id
- Tool Id can be found using SketchDraw tooltype constants eg.
toolColor- Set color for pen, using CSS colors.localSourceImagePath- Local file path of the image.onSaveSketch(saveArgs)- Callback when saving is complete.saveArgsIs an object having the following properties -localFilePath- Local file path of the saved image.imageWidth- Width of the saved image.imageHeight- Height of the saved image.
maxUndo- Max number of operations to store in memory for undo calls (default 10)onDrawSketch(event)- Callback fired after each "committed" draw (including undo and clears)event: contains the undo stack count, useful to show/hide the undo button.{stackCount: int}
