Viewshoot.js 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React, { useCallback, useState, useRef } from 'react';
  2. import {
  3. ScrollView,
  4. StyleSheet,
  5. Text,
  6. View,
  7. Image,
  8. SafeAreaView,
  9. RefreshControl,
  10. } from 'react-native';
  11. import ViewShot from 'react-native-view-shot';
  12. import Btn from './Btn';
  13. const Viewshoot = () => {
  14. const full = useRef();
  15. const [preview, setPreview] = useState(null);
  16. const [itemsCount, setItemsCount] = useState(10);
  17. const [refreshing, setRefreshing] = useState(false);
  18. const onCapture = useCallback(() => {
  19. full.current.capture().then(uri => setPreview({ uri }));
  20. }, []);
  21. return (
  22. <ScrollView
  23. style={styles.container}
  24. contentContainerStyle={styles.root}
  25. refreshControl={
  26. <RefreshControl
  27. refreshing={refreshing}
  28. onRefresh={() => {
  29. setRefreshing(true);
  30. setTimeout(() => {
  31. setItemsCount(itemsCount + 10);
  32. setRefreshing(false);
  33. }, 5000);
  34. }}
  35. />
  36. }
  37. >
  38. <SafeAreaView>
  39. <ViewShot ref={full} style={styles.container}>
  40. <Btn onPress={onCapture} label="Shoot Me" />
  41. <Image
  42. fadeDuration={0}
  43. resizeMode="contain"
  44. style={styles.previewImage}
  45. source={preview}
  46. />
  47. {Array(itemsCount)
  48. .fill(null)
  49. .map((_, index) => ({
  50. key: index,
  51. text: `${index + 1}`,
  52. color: `hsl(${(index * 13) % 360}, 50%, 80%)`,
  53. }))
  54. .map(({ key, text, color }) => {
  55. return (
  56. <View style={[styles.item, { backgroundColor: color }]} key={key}>
  57. <Text style={styles.itemText}>{text}</Text>
  58. </View>
  59. );
  60. })}
  61. </ViewShot>
  62. </SafeAreaView>
  63. </ScrollView>
  64. );
  65. };
  66. const styles = StyleSheet.create({
  67. container: {
  68. flex: 1,
  69. backgroundColor: '#fff',
  70. },
  71. root: {
  72. paddingVertical: 20,
  73. },
  74. content: {
  75. backgroundColor: '#fff',
  76. },
  77. item: {
  78. padding: 20,
  79. alignItems: 'center',
  80. justifyContent: 'center',
  81. },
  82. itemText: {
  83. fontSize: 22,
  84. color: '#666',
  85. },
  86. previewImage: {
  87. height: 200,
  88. backgroundColor: 'black',
  89. },
  90. });
  91. Viewshoot.navigationProps = {
  92. title: 'Viewshoot',
  93. };
  94. export default Viewshoot;