**This is the App.tsx file of an app I’m making (React Native Typescript). I want to add fade in/out transitions between some images.
When I run this code, nothing shows up on the screen (I use a Mac):
**
import React, { useEffect, useState } from 'react';
import { View, StyleSheet, Image, Dimensions } from 'react-native';
import Animated, { Easing } from 'react-native-reanimated';
import { StatusBar } from 'expo-status-bar';
import { NavigationContainer, useNavigation } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import StartScreen1 from './src/components/SOTSStartScreen1.tsx';
import StartScreen2 from './src/components/SOTSStartScreen2.tsx';
import StartScreen3 from './src/components/SOTSStartScreen3.tsx';
import RiaLogoScreen from './assets/images/ShadowsOnTheSandsLoadingScreen2.png';
import ShadowsOnTheSandsLoadingScreen from './assets/images/ShadowsOnTheSandsLoadingScreen.png';
import HomePage from './src/components/ShadowsOnTheSandsHomePage';
import Settings from './src/components/ShadowsOnTheSandsSettings';
import ShadowsOnTheSandsChapter1 from './src/stories/Story-ShadowsOnTheSands/ShadowsOnTheSandsChapter1.tsx';
const { Value, timing } = Animated;
const Stack = createStackNavigator();
function App() {
const navigation = useNavigation();
const [username, setUsername] = useState('');
const fadeAnim = new Value(1); // Initial opacity 1 (fully visible)
useEffect(() => {
console.log("Starting fade animation"); // Debug statement
const timer = setTimeout(() => {
timing(fadeAnim, {
toValue: 0,
duration: 1000, // 1 second duration for fade out
easing: Easing.inOut(Easing.ease),
}).start(() => {
console.log("Fade animation completed"); // Debug statement
navigation.navigate('ShadowsOnTheSandsLoadingScreen');
});
}, 5000);
return () => clearTimeout(timer);
}, [fadeAnim, navigation]);
const screenWidth = Dimensions.get('window').width;
const screenHeight = Dimensions.get('window').height;
return (
<View style={styles.container}>
<StatusBar style="auto" />
<Animated.Image
source={RiaLogoScreen}
style={[styles.image, { width: screenWidth, height: screenHeight, opacity: fadeAnim }]}
/>
<ShadowsOnTheSandsChapter1 username={username} />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'black',
},
image: {
resizeMode: 'contain',
},
});
function Main() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="App" component={App} />
<Stack.Screen name="ShadowsOnTheSandsLoadingScreen" component={ShadowsOnTheSandsLoadingScreen} />
<Stack.Screen name="StartScreen1" component={StartScreen1} />
<Stack.Screen name="StartScreen2" component={StartScreen2} />
<Stack.Screen name="StartScreen3" component={StartScreen3} />
<Stack.Screen name="HomePage" component={HomePage} />
<Stack.Screen name="Settings" component={Settings} />
<Stack.Screen name="ShadowsOnTheSandsChapter1" component={ShadowsOnTheSandsChapter1} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default Main;
**This is my original code, which is actually working as expected when I run it:
**
This code is without the fading transitions/animations.
import React, { useEffect, useState } from 'react';
import { View, StyleSheet, Image, Dimensions } from 'react-native';
import { StatusBar } from 'expo-status-bar';
import { NavigationContainer, useNavigation } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomePage from './src/components/ShadowsOnTheSandsHomePage';
import Settings from './src/components/ShadowsOnTheSandsSettings';
import StartScreen1 from './src/components/SOTSStartScreen1.tsx';
import StartScreen2 from './src/components/SOTSStartScreen2.tsx';
import StartScreen3 from './src/components/SOTSStartScreen3.tsx';
import RiaLogoScreen from './assets/images/ShadowsOnTheSandsLoadingScreen2.png';
import ShadowsOnTheSandsLoadingScreen from './assets/images/ShadowsOnTheSandsLoadingScreen.png';
import ShadowsOnTheSandsChapter1 from './src/stories/Story-ShadowsOnTheSands/ShadowsOnTheSandsChapter1.tsx';
const Stack = createStackNavigator();
function App() {
const navigation = useNavigation();
const [username, setUsername] = useState('');
useEffect(() => {
const timer = setTimeout(() => {
navigation.navigate('ShadowsOnTheSandsLoadingScreen');
}, 5000); // Navigate to ShadowsOnTheSandsLoadingScreen after 5 seconds
// Clear the timer
return () => clearTimeout(timer);
}, [navigation]); // Include navigation in the dependency array
useEffect(() => {
const timer = setTimeout(() => {
navigation.navigate('StartScreen1');
}, 5000); // Navigate to StartScreen1 after 5 seconds
// Clear the timer
return () => clearTimeout(timer);
}, [navigation]); // Include navigation in the dependency array
const screenWidth = Dimensions.get('window').width;
const screenHeight = Dimensions.get('window').height;
return (
<View style={styles.container}>
<StatusBar style="auto" />
<Image source={RiaLogoScreen} style={[styles.image, { width: screenWidth, height: screenHeight }]} />
<ShadowsOnTheSandsChapter1 username={username} />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'black',
},
image: {
resizeMode: 'contain',
},
});
function Main() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="App" component={App} />
<Stack.Screen name="StartScreen1" component={StartScreen1} />
<Stack.Screen name="StartScreen2" component={StartScreen2} />
<Stack.Screen name="StartScreen3" component={StartScreen3} />
<Stack.Screen name="HomePage" component={HomePage} />
<Stack.Screen name="Settings" component={Settings} />
<Stack.Screen name="ShadowsOnTheSandsChapter1" component={ShadowsOnTheSandsChapter1} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default Main;
New contributor
Riya H is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.