1- import React from "react" ;
2- import { StyleSheet , Text , View , Image } from "react-native" ;
1+ import React , { useState } from "react" ;
2+ import { StyleSheet , Text , View , SafeAreaView , Switch } from "react-native" ;
33import * as Animatable from "react-native-animatable" ;
44import RNMasonryScroll from "react-native-masonry-scrollview" ;
5+ import Image from "react-native-scalable-image" ;
6+ import { useResponsiveWidth } from "react-native-responsive-dimensions" ;
57
68const { createAnimatableComponent } = Animatable ;
79
810const AnimatableView = createAnimatableComponent ( View ) ;
911
1012const images = [
13+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
14+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
15+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
16+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
17+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
18+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
19+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
20+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
21+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
22+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
23+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
24+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
25+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
26+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
27+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
28+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
29+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
30+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
31+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
32+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
33+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
34+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
35+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
36+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
37+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
38+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
39+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
40+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
41+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
42+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
43+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
44+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
45+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
46+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
47+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
48+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
49+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
50+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
51+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
52+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
53+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
54+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
55+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
56+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
57+ "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
58+ "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
59+ "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
60+ "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
1161 "https://images.unsplash.com/photo-1558981001-792f6c0d5068?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
1262 "https://images.unsplash.com/photo-1580502734537-c6a7ee0bdb41?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
1363 "https://images.unsplash.com/photo-1580500325788-5012abe74ebf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60" ,
@@ -34,44 +84,70 @@ const images = [
3484 "https://images.unsplash.com/photo-1580524764764-284c2a54b185?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=400&q=60"
3585] ;
3686
37- export default function App ( ) {
87+ const App = ( ) => {
88+ const imageWidth : number = useResponsiveWidth ( 50 ) - 20 ;
89+ const [ isHorizontal , setIsHorizontal ] = useState < boolean > ( false ) ;
90+
91+ const toggleHorizontal = ( ) => setIsHorizontal ( ! isHorizontal ) ;
92+
93+ const imageProp = isHorizontal
94+ ? { height : imageWidth }
95+ : { width : imageWidth } ;
96+
3897 return (
39- < RNMasonryScroll
40- columns = { 3 }
41- evenColumnStyle = { { } }
42- oddColumnStyle = { { marginTop : 60 } }
43- >
44- { images . map ( ( image , imageIndex ) => {
45- return (
46- < AnimatableView
47- animation = "fadeInUp"
48- delay = { 100 * imageIndex }
49- style = { {
50- height : 300 ,
51- width : 300 ,
52- margin : 10 ,
53- borderRadius : 10 ,
54- overflow : "hidden" ,
55- backgroundColor : "silver"
56- } }
57- >
58- < Image
59- style = { { flex : 1 } }
60- source = { { uri : image } }
61- key = { imageIndex }
62- />
63- </ AnimatableView >
64- ) ;
65- } ) }
66- </ RNMasonryScroll >
98+ < SafeAreaView >
99+ < View style = { styles . header } >
100+ < Switch onValueChange = { toggleHorizontal } value = { isHorizontal } />
101+ < Text style = { styles . headerText } > Horizontal</ Text >
102+ </ View >
103+ < RNMasonryScroll
104+ removeClippedSubviews = { true }
105+ columns = { isHorizontal ? 3 : 2 }
106+ evenColumnStyle = { styles . evenColumnStyle }
107+ oddColumnStyle = {
108+ isHorizontal
109+ ? styles . oddColumnStyleHorizontal
110+ : styles . oddColumnStyleVertical
111+ }
112+ horizontal = { isHorizontal }
113+ >
114+ { images . map ( ( image , imageIndex ) => {
115+ return (
116+ < AnimatableView
117+ animation = { isHorizontal ? "fadeInRight" : "fadeInUp" }
118+ delay = { 100 * imageIndex }
119+ style = { styles . imageContainer }
120+ >
121+ < Image source = { { uri : image } } { ...imageProp } key = { imageIndex } />
122+ </ AnimatableView >
123+ ) ;
124+ } ) }
125+ </ RNMasonryScroll >
126+ </ SafeAreaView >
67127 ) ;
68- }
128+ } ;
69129
70130const styles = StyleSheet . create ( {
71- container : {
72- flex : 1 ,
73- backgroundColor : "#fff" ,
131+ header : {
132+ flexDirection : "row" ,
74133 alignItems : "center" ,
75- justifyContent : "center"
76- }
134+ justifyContent : "center" ,
135+ margin : 8
136+ } ,
137+ headerText : {
138+ fontWeight : "bold" ,
139+ marginHorizontal : 8 ,
140+ fontSize : 16
141+ } ,
142+ imageContainer : {
143+ margin : 10 ,
144+ borderRadius : 10 ,
145+ overflow : "hidden" ,
146+ backgroundColor : "silver"
147+ } ,
148+ evenColumnStyle : { } ,
149+ oddColumnStyleVertical : { marginTop : 60 } ,
150+ oddColumnStyleHorizontal : { marginLeft : 60 }
77151} ) ;
152+
153+ export default App ;
0 commit comments