Bird
Raised Fist0
React Nativemobile~5 mins

Animated API basics in React Native

Choose your learning style10 modes available
Introduction

The Animated API helps you create smooth and interactive animations in your app. It makes your app feel alive and fun to use.

When you want a button to smoothly change size when pressed.
When you want to fade in a picture or text on the screen.
When you want to move an object across the screen smoothly.
When you want to create a loading spinner animation.
When you want to animate a list item sliding in or out.
Syntax
React Native
import { Animated } from 'react-native';

const value = new Animated.Value(0);

Animated.timing(value, {
  toValue: 1,
  duration: 500,
  useNativeDriver: true,
}).start();

Animated.Value holds the animation value that changes over time.

Animated.timing changes the value smoothly from a start to an end value.

Examples
This example fades in an element by animating its opacity from 0 to 1 in 1 second.
React Native
const opacity = new Animated.Value(0);

Animated.timing(opacity, {
  toValue: 1,
  duration: 1000,
  useNativeDriver: true,
}).start();
This example moves an element horizontally by animating its position value from 0 to 100.
React Native
const position = new Animated.Value(0);

Animated.timing(position, {
  toValue: 100,
  duration: 500,
  useNativeDriver: true,
}).start();
Sample App

This app shows a blue box that starts invisible. When you press the "Fade In" button, the box smoothly appears by increasing its opacity from 0 to 1 over 1 second.

React Native
import React, { useRef } from 'react';
import { Animated, View, Button, StyleSheet } from 'react-native';

export default function AnimatedBox() {
  const fadeAnim = useRef(new Animated.Value(0)).current;

  const fadeIn = () => {
    Animated.timing(fadeAnim, {
      toValue: 1,
      duration: 1000,
      useNativeDriver: true,
    }).start();
  };

  return (
    <View style={styles.container}>
      <Animated.View
        style={[styles.box, { opacity: fadeAnim }]} />
      <Button title="Fade In" onPress={fadeIn} />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  box: {
    width: 100,
    height: 100,
    backgroundColor: 'blue',
    marginBottom: 20,
  },
});
OutputSuccess
Important Notes

Always set useNativeDriver: true for better performance when animating properties like opacity or position.

You can animate many properties like opacity, position, scale, and rotation using Animated API.

Remember to use Animated.View or other Animated components to apply animations.

Summary

The Animated API lets you create smooth animations easily.

Use Animated.Value to hold animation values.

Use Animated.timing to change values over time with smooth transitions.

Practice

(1/5)
1. What is the primary purpose of Animated.Value in React Native's Animated API?
easy
A. To define the duration of an animation
B. To create a new component for animation
C. To store and track the current value of an animation
D. To handle user gestures during animation

Solution

  1. Step 1: Understand the role of Animated.Value

    Animated.Value is used to hold a numeric value that changes over time during an animation.
  2. Step 2: Differentiate from other Animated API parts

    It does not create components or handle gestures; it only stores the animation's current value.
  3. Final Answer:

    To store and track the current value of an animation -> Option C
  4. Quick Check:

    Animated.Value = animation value holder [OK]
Hint: Animated.Value holds the changing number in animation [OK]
Common Mistakes:
  • Confusing Animated.Value with animation duration
  • Thinking Animated.Value creates UI components
  • Assuming it handles user input gestures
2. Which of the following is the correct syntax to create an Animated.Value starting at 0?
easy
A. const anim = new Animated.Value(0);
B. const anim = Animated.value(0);
C. const anim = Animated.Value(0);
D. const anim = Animated.createValue(0);

Solution

  1. Step 1: Recall correct Animated.Value instantiation

    Animated.Value is a class and must be instantiated with new.
  2. Step 2: Check each option's syntax

    Only new Animated.Value(0) is correct; others miss new or use wrong method names.
  3. Final Answer:

    const anim = new Animated.Value(0); -> Option A
  4. Quick Check:

    Use new keyword to create Animated.Value [OK]
Hint: Always use 'new' when creating Animated.Value [OK]
Common Mistakes:
  • Omitting the 'new' keyword
  • Using lowercase 'value' instead of 'Value'
  • Using non-existent methods like createValue
3. What will be the final value of anim after this code runs?
const anim = new Animated.Value(0);
Animated.timing(anim, {toValue: 100, duration: 500, useNativeDriver: false}).start();
// Assume animation completes instantly for this question
medium
A. 100
B. 0
C. 50
D. undefined

Solution

  1. Step 1: Understand Animated.timing behavior

    Animated.timing animates the value from its current state to toValue over the given duration.
  2. Step 2: Since animation completes instantly here, anim reaches toValue

    Because we assume instant completion, anim will be 100 after animation.
  3. Final Answer:

    100 -> Option A
  4. Quick Check:

    Animated.timing sets value to toValue after animation [OK]
Hint: Animated.timing moves value to toValue after animation [OK]
Common Mistakes:
  • Thinking value stays at 0
  • Assuming value is halfway (50) instantly
  • Confusing useNativeDriver effect on value
4. Identify the error in this animation code snippet:
const anim = new Animated.Value(0);
Animated.timing(anim, {toValue: 1, duration: 300}).start();
medium
A. toValue must be 0 or less
B. Missing useNativeDriver property in timing config
C. start() method is missing a callback
D. Animated.Value should be initialized with 1

Solution

  1. Step 1: Check Animated.timing config requirements

    Since React Native 0.62+, useNativeDriver is required to specify if native driver is used.
  2. Step 2: Identify missing property

    The code lacks useNativeDriver, causing a warning or error.
  3. Final Answer:

    Missing useNativeDriver property in timing config -> Option B
  4. Quick Check:

    Always include useNativeDriver in Animated.timing [OK]
Hint: Always add useNativeDriver in timing config [OK]
Common Mistakes:
  • Ignoring useNativeDriver requirement
  • Thinking start() needs a callback
  • Initializing Animated.Value incorrectly
5. You want to animate a view's opacity from 0 to 1 and then back to 0 repeatedly. Which approach correctly uses the Animated API to achieve this?
hard
A. Use setTimeout to manually update opacity value every second
B. Use a single Animated.timing with toValue 1 and duration doubled
C. Use Animated.spring with toValue 1 and then call Animated.timing to 0
D. Use Animated.loop with Animated.sequence of two Animated.timing calls changing opacity 0->1 and 1->0

Solution

  1. Step 1: Understand repeating animations

    To repeat animations, Animated.loop is used to repeat a sequence or animation indefinitely.
  2. Step 2: Use Animated.sequence to chain opacity changes

    Animating opacity from 0 to 1 then back to 0 requires sequencing two Animated.timing calls inside a loop.
  3. Step 3: Evaluate options

    Use Animated.loop with Animated.sequence of two Animated.timing calls changing opacity 0->1 and 1->0 correctly uses Animated.loop with Animated.sequence of two timings. Others either don't loop or use incorrect methods.
  4. Final Answer:

    Use Animated.loop with Animated.sequence of two Animated.timing calls changing opacity 0->1 and 1->0 -> Option D
  5. Quick Check:

    Loop + sequence = repeated animation [OK]
Hint: Use Animated.loop with sequence for repeated animations [OK]
Common Mistakes:
  • Trying to do repeat with single timing
  • Mixing spring and timing incorrectly
  • Using manual timers instead of Animated API
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard