I wanted to add an animated background for my game Catchphrase as the main play screen had a lot of white space and now you can add it as well.
1. Constants
Let’s start by defining some constants for our animation. Create constants.js
export const INPUT_RANGE_START = 0; export const INPUT_RANGE_END = 1; export const OUTPUT_RANGE_START = -281; export const OUTPUT_RANGE_END = 0; export const ANIMATION_TO_VALUE = 1; export const ANIMATION_DURATION = 25000;
you can modify the values according to your need.
We need these values for interpolation . If you want to learn more about interpolation. Here is a great tutorial for it
Interpolation with React Native Animations
Now we need an image that we want to animate. I am using the following image.
If it was not clear what we are doing exactly in the above gif. Here is a simple explaination. We have an image and we are moving it down at a 45 degree angle using animation.
2. Styling the image
Okay let’s make the big enough to cover the screen. Create styles.js
import {StyleSheet} from 'react-native' const styles = StyleSheet.create({ background: { position: 'absolute', width: 1200, height: 1200, top: 0, opacity: 0.2, transform: [ { translateX: 0, }, { translateY: 0, }, ], }, }); export default styles
Now finally lets create the component to animate background :- BackgroundAnimation
3. Animating the ImageBackground Component
import React, { useEffect,useRef } from 'react'; import { Animated, Easing, ImageBackground } from 'react-native'; import backgroundImage from '../../assets/background.png'; import styles from './styles'; import { INPUT_RANGE_START, INPUT_RANGE_END, OUTPUT_RANGE_START, OUTPUT_RANGE_END, ANIMATION_TO_VALUE, ANIMATION_DURATION, } from '../../utils/constants'; export default function BackgroundAnimation() { const initialValue = 0; const translateValue = useRef(new Animated.Value(initialValue)).current; useEffect(() => { const translate = () => { translateValue.setValue(initialValue); Animated.timing(translateValue, { toValue: ANIMATION_TO_VALUE, duration: ANIMATION_DURATION, easing: Easing.linear, useNativeDriver: true, }).start(() => translate()); }; translate(); }, [translateValue]); const translateAnimation = translateValue.interpolate({ inputRange: [INPUT_RANGE_START, INPUT_RANGE_END], outputRange: [OUTPUT_RANGE_START, OUTPUT_RANGE_END], }); const AnimetedImage = Animated.createAnimatedComponent(ImageBackground); return ( <AnimetedImage resizeMode="repeat" style={[styles.background,{ transform: [ { translateX: translateAnimation, }, { translateY: translateAnimation, }, ], }]} source={backgroundImage} /> ) }
Now we can simply import our BackgroundAnimation in any of our screen and we will get an animated background automatically.
Thanks for reading this article. Be sure to like/recommend as much as you can and also share with your friends. It means a lot to me.
If you want to check out the game in this blog . The game is available both for Android and iOS.
Top comments (0)