DEV Community

Cover image for Creating an Animated Button in React Native with Lottie
Neeraj Singh
Neeraj Singh

Posted on • Edited on

1

Creating an Animated Button in React Native with Lottie

Adding animations can significantly enhance the user experience of a mobile app, making it more engaging and dynamic. React Native provides various libraries and tools to incorporate animations seamlessly. One such popular library is Lottie, which allows you to integrate Adobe After Effects animations into your React Native projects effortlessly.

In this tutorial, we'll learn how to create a simple yet powerful animated button in React Native to start and stop animations using the Lottie library. By the end of this tutorial, you'll have a clear understanding of how to control animations dynamically based on user interactions.

Prerequisites
Before diving into this tutorial, you should have a basic understanding of React Native and how to set up a development environment. Make sure you have Node.js and npm (or yarn) installed on your machine.

Steps to Create an Animated Button

Step 1: Setting Up the Project
First, set up your React Native project. If you need help setting up, refer to the React Native environment setup guide.

Step 2: Install the Lottie Library
Install the Lottie library using npm or yarn:

npm install lottie-react-native
Enter fullscreen mode Exit fullscreen mode

For iOS, you also need to install the pod:

cd ios
pod install
Enter fullscreen mode Exit fullscreen mode

Step 3: Download Lottie Animation
If you don’t have any Lottie animations, you can download them from the LottieFiles website. Make sure to download the JSON file of the animation.

Step 4: Move the Animation File
Move your animation JSON file inside the assets folder of your project. In this example, we create a new directory called animation inside the assets folder and place the JSON file there.

project-root/
└── assets/
    └── animation/
        └── animation_1.json
Enter fullscreen mode Exit fullscreen mode

Step 5: Create the HomeScreen Component
Now, let's create a screen with a button that can control the animation. Here’s how you can do it:

// HomeScreen.tsx

import LottieView from "lottie-react-native";
import { Fragment, useRef, useState } from "react";
import { Button, Dimensions, StyleSheet, Text, View } from "react-native";

export default function HomeScreen() {
  const [playPause, setPlayPause] = useState<string>("play");
  const animationRef = useRef<LottieView>(null);

  const runAnimation = (mode: string) => {
    if (mode === "play") {
      animationRef?.current?.play();
    }

    if (mode === "pause") {
      animationRef?.current?.pause();
    }
  };

  return (
    <Fragment>
      <View style={styles.container}>
        <View style={styles.animationBox}>
          <LottieView
            ref={animationRef}
            source={require("../../assets/animation/animation_1.json")}
            autoPlay={false}
            loop={false}
            style={{
              width: Dimensions.get("window").width - 100,
              height: Dimensions.get("window").height - 20,
            }}
          />
        </View>
        <View style={styles.btnBox}>
          <Button onPress={() => runAnimation("play")} title={"Start"} />
          <Button onPress={() => runAnimation("pause")} title={"Pause"} />
        </View>
      </View>
    </Fragment>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  animationBox: {
    flex: 0.7,
    width: "100%",
    justifyContent: "center",
    alignItems: "center",
  },
  btnBox: {
    flex: 0.3,
    width: "50%",
    flexDirection: "row",
    justifyContent: "space-evenly",
    alignItems: "center",
  },
  btn: {
    width: "50%",
  },
});
Enter fullscreen mode Exit fullscreen mode

Output
Here's what the output should look like:

output

Conclusion
In this guide, we've explored how to integrate Lottie animations within React Native applications, focusing specifically on implementing play and pause controls. Leveraging the Lottie library, we've crafted a user-friendly animated button component capable of dynamically initiating and halting animations based on user interaction.

Feel free to experiment with different animations and expand the functionality of your app by adding more interactive elements. Happy coding!

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay