import React from 'react'; import {StyleSheet, View, Text, PixelRatio, FlatList, Image, TouchableHighlight} from 'react-native'; import {Navigation, SharedElementTransition} from 'react-native-navigation'; import images from './images'; const ROW_HEIGHT = 650; const COLS = 2; class Masonry extends React.Component { onAssetPress = (image, key) => { this.props.navigator.push({ screen: 'example.Transitions.SharedElementTransitions.Masonry.Item', sharedElements: [key], passProps: { image, sharedImageId: key, }, }); }; renderAsset = (asset, row, column, index) => { const key = `row_${row}_column_${column}_asset_${index}`; return ( { this.onAssetPress(asset.source, key); }} style={[styles.assetContainer, {flex: asset.weight}]} > ); }; renderItem = ({item, index}) => { return ( {[...new Array(COLS)].map((column, columnIndex) => ( {item.images[columnIndex].map((asset, assetIndex) => this.renderAsset(asset, index, columnIndex, assetIndex))} ))} ); }; render() { return ( ({length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index})} /> ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#ffffff', }, item: { flex: 1, flexDirection: 'row', }, assetContainer: { margin: 5, borderRadius: 6, borderWidth: StyleSheet.hairlineWidth, }, asset: { flex: 1, borderRadius: 6, }, }); export default Masonry;