import React, { Component } from "react";
import {
StyleSheet,
Text,
View,
ScrollView,
Image,
Switch,
TextInput,
Picker,
Slider,
WebView,
} from "react-native";
import omit from "lodash/omit";
import { takeSnapshot } from "react-native-view-shot";
// import { Surface } from "gl-react-native";
// import GL from "gl-react";
// import MapView from "react-native-maps";
import Video from "react-native-video";
import Btn from "./Btn";
const catsSource = {
uri: "https://i.imgur.com/5EOyTDQ.jpg",
};
/*const shaders = GL.Shaders.create({
helloGL: {
frag: `
precision highp float;
varying vec2 uv;
uniform float blue;
void main () {
gl_FragColor = vec4(uv.x, uv.y, blue, 1.0);
}`
}
});
const HelloGL = GL.createComponent(
({ blue }) =>
,
{ displayName: "HelloGL" });*/
export default class App extends Component {
state = {
previewSource: catsSource,
error: null,
res: null,
value: {
format: "png",
quality: 0.9,
result: "file",
snapshotContentContainer: false,
},
};
snapshot = refname => () =>
takeSnapshot(this.refs[refname], this.state.value)
.then(res =>
this.state.value.result !== "file"
? res
: new Promise((success, failure) =>
// just a test to ensure res can be used in Image.getSize
Image.getSize(
res,
(width, height) => (console.log(res,width,height), success(res)),
failure)))
.then(res => this.setState({
error: null,
res,
previewSource: { uri:
this.state.value.result === "base64"
? "data:image/"+this.state.value.format+";base64,"+res
: res }
}))
.catch(error => (console.warn(error), this.setState({ error, res: null, previewSource: null })));
render() {
const { value, previewSource, error, res } = this.state;
const { format, quality, width, height, result, snapshotContentContainer } = value;
return (
😃 ViewShot Example 😜
This is a{" "}
react-native-view-shot
{" "}showcase.
{ error
?
{""+(error.message || error)}
: }
{res ? res.slice(0, 200) : ""}
this.setState({ previewSource: catsSource })} />
Format
this.setState({ value: { ...value, format } })}>
Quality
this.setState({ value: { ...value, quality } })}
/>
{(quality*100).toFixed(0)}%
Size
this.setState({
value: omit({
...value,
width: 300,
height: 300,
}, checked ? [] : ["width","height"])
})}
/>
{ width!==undefined ? !isNaN(txt) && this.setState({
value: { ...value, width: parseInt(txt, 10) }
})}
/> : (auto) }
x
{ height!==undefined ? !isNaN(txt) && this.setState({
value: { ...value, height: parseInt(txt, 10) }
})}
/> : (auto) }
Result
this.setState({ value: { ...value, result } })}>
snapshotContentContainer
this.setState({
value: { ...value, snapshotContentContainer }
})}
/>
Experimental Stuff
{/*
*/}
);
}
}
const styles = StyleSheet.create({
root: {
flex: 1,
backgroundColor: "#f6f6f6",
},
container: {
paddingVertical: 20,
backgroundColor: "#f6f6f6",
},
title: {
fontSize: 20,
textAlign: "center",
margin: 10,
},
experimental: {
padding: 10,
flexDirection: "column",
alignItems: "center",
},
experimentalTitle: {
fontSize: 16,
margin: 10,
},
p1: {
marginBottom: 10,
flexDirection: "row",
flexWrap: "wrap",
justifyContent: "center",
alignItems: "center",
},
text: {
color: "#333",
},
code: {
fontWeight: "bold",
color: "#000",
},
field: {
flexDirection: "row",
alignItems: "center",
paddingVertical: 4,
paddingHorizontal: 10,
},
label: {
minWidth: 80,
fontStyle: "italic",
color: "#888",
},
switch: {
marginRight: 50,
},
input: {
flex: 1,
marginHorizontal: 5,
},
inputText: {
flex: 1,
marginHorizontal: 5,
color: "red",
textAlign: "center",
},
preview: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-around",
},
previewImage: {
width: 375,
height: 300,
},
previewUriText: {
fontSize: 12,
fontStyle: "italic",
color: "#666",
textAlign: "center",
padding: 10,
paddingBottom: 0,
},
previewError: {
width: 375,
height: 300,
paddingTop: 20,
textAlign: "center",
fontSize: 20,
fontWeight: "bold",
color: "#fff",
backgroundColor: "#c00",
},
header: {
backgroundColor: "#f6f6f6",
borderColor: "#000",
borderWidth: 1,
paddingBottom: 20,
},
form: {
backgroundColor: "#fff",
},
btns: {
flexDirection: "row",
flexWrap: "wrap",
alignItems: "center",
justifyContent: "center",
paddingVertical: 10,
margin: 4,
}
});