Mobile Development with Lottie

iOS Implementation (Swift)

Installation

// CocoaPods
pod 'lottie-ios'

// Swift Package Manager
.package(url: "https://github.com/airbnb/lottie-ios.git", from: "4.0.0")

Basic Usage

import Lottie

class ViewController: UIViewController {
  private var animationView: LottieAnimationView?
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    // Load animation from bundle
    animationView = .init(name: "animation")
    animationView!.frame = view.bounds
    animationView!.contentMode = .scaleAspectFit
    animationView!.loopMode = .loop
    animationView!.animationSpeed = 0.5
    view.addSubview(animationView!)
    
    // Start animation
    animationView!.play()
  }
}

Android Implementation (Kotlin)

Gradle Setup

// app/build.gradle
dependencies {
    implementation 'com.airbnb.android:lottie:6.1.0'
}

XML Layout

<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/animation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:lottie_fileName="animation.json"
    app:lottie_loop="true"
    app:lottie_autoPlay="true" />

Programmatic Control

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val animationView = findViewById<LottieAnimationView>(R.id.animation_view)
        
        // Load from assets
        animationView.setAnimation("animation.json")
        
        // Control playback
        animationView.playAnimation()
        animationView.pauseAnimation()
        
        // Set callbacks
        animationView.addAnimatorListener(object : AnimatorListener {
            override fun onAnimationEnd(animation: Animator) {
                // Animation completed
            }
        })
    }
}

Cross-Platform Solutions

React Native

// Install
npm install lottie-react-native

// iOS additional setup
cd ios && pod install

// Usage
import LottieView from 'lottie-react-native';

export default function Animation() {
  return (
    <LottieView
      source={require('./animation.json')}
      autoPlay
      loop
      style={{ width: 200, height: 200 }}
    />
  );
}

Flutter

// pubspec.yaml
dependencies:
  lottie: ^2.6.0

// Usage
import 'package:lottie/lottie.dart';

Widget build(BuildContext context) {
  return Lottie.asset(
    'assets/animation.json',
    width: 200,
    height: 200,
    fit: BoxFit.fill,
  );
}

Mobile Performance Tips

Mobile devices have specific performance considerations that require careful optimization when implementing Lottie animations. Enabling hardware acceleration when available can significantly improve rendering performance by offloading graphics processing to the GPU, resulting in smoother animations and reduced battery consumption. Optimizing animations for 60fps on mobile devices ensures fluid motion that matches the refresh rate of most modern smartphones, creating a more polished user experience.

For applications that use the same animations repeatedly, consider using cached compositions to reduce processing overhead and memory usage. This approach allows the animation engine to reuse previously loaded assets rather than parsing JSON and creating new elements each time. Implementing proper memory management practices is essential on memory-constrained mobile devices - be sure to destroy animations when they're no longer needed and avoid keeping references that prevent garbage collection.

Perhaps most importantly, always test animations on lower-end devices for performance validation. What works smoothly on flagship devices may cause significant frame drops on budget phones with less powerful processors. Establishing a minimum performance target device helps ensure your animations remain accessible to a broader audience without compromising the user experience.

Platform-Specific Considerations

iOS Considerations:

When implementing Lottie animations on iOS platforms, using CALayer backing provides better performance by leveraging Core Animation's hardware-accelerated rendering pipeline. For simpler animations where Lottie might be overkill, consider using Core Animation directly for improved efficiency and reduced overhead. Always be mindful of memory usage on older iOS devices, as animation assets can quickly consume available memory, especially on devices with limited RAM like older iPhone models or entry-level iPads.

Android Considerations:

Android's diverse ecosystem requires thorough testing across different API levels to ensure compatibility and consistent animation behavior. Enabling hardware acceleration where possible is particularly important on Android due to the wide variety of GPU capabilities across different devices. When packaging your application, consider the APK size impact of animation files, as larger animation files can significantly increase download size. Using the Android App Bundle format and implementing on-demand asset delivery can help mitigate size concerns for animations that aren't immediately needed at launch.