There's not much work to do to achieve this with react native. Here I have tried to demonstrate similar visual layout as you have asked.

We just need to listen for onLayout event of view that gets invoke whenever there is a change in orientation.
By comparing the height and width from Dimension.get('window') we can figure out the whether the device is in portrait or landscape mode. Here's the simple code for this
import React, { Component } from 'react';
import {
StyleSheet,
Text,
View,
Image,
Dimensions
} from 'react-native';
var {height, width} = Dimensions.get('window');
export default class Com extends Component{
constructor(){
console.log('constructor');
super();
this.state = {
layout:{
height:height,
width:width,
}
};
}
_onLayout = event => {
console.log('------------------------------------------------' + JSON.stringify(event.nativeEvent.layout));
this.setState({
layout:{
height:event.nativeEvent.layout.height,
width:event.nativeEvent.layout.width,
}
});
}
render(){
console.log(JSON.stringify(this.props));
var imagel = this.props.list[0].src;
var landscapeView =
<View style={{marginTop:20, flexDirection:'row'}}>
<Image source={require('./flower.jpg')} style={{height:this.state.layout.height-50, width:this.state.layout.width/2}}/>
<View>
<Text style={{backgroundColor:'gray', margin:5}}> header this is landscape view </Text>
<Text style={{backgroundColor:'gray',margin:5}}> footer this is portrait view </Text>
</View>
</View>
var portraitView = <View style={{marginTop:20}}>
<Text style={{backgroundColor:'gray', margin:5}}> header this is landscape view </Text>
<Image source={require('./flower.jpg')} style={{height:200, width:this.state.layout.width}}/>
<Text style={{backgroundColor:'gray',margin:5}}> footer this is portrait view </Text>
</View>
var cview =null;
if (this.state.layout.height>this.state.layout.width) {
cview = portraitView
}else{
cview = landscapeView;
}
return(
<View style={{backgroundColor:'red', flex:1}} onLayout={this._onLayout}>
{cview}
</View>
);
}
}
What's happening here is we are listening to event onLayout which are triggered when there is a orientation change. Then we have state variable which hold the actual height and width of the screen to reflect the orientation change. we are using this state height and width for view design.
Two things is happening here.
- onLayout get invoked upon orientation change.
- upon changing state value, view will render again.