Lottie Animations in Mobile Apps: Implementation and Maintenance

The interface stutters on some devices, and users notice it? We develop and implement a unified motion system end-to-end — effects and transitions run smoothly on any screen.

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 30 of 35All 1734 services
Creating 2D animations for a mobile game
Medium
from 2 weeks to 3 months
Drag & Reorder Animation in Mobile Apps
Medium
from 1 day to 3 days

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a mobile application for FEEDME
    Development of a mobile application for FEEDME
    971
  • Development of a mobile application for XOOMER
    Development of a mobile application for XOOMER
    869
  • Development of a mobile application for RHL
    Development of a mobile application for RHL
    1289
  • Development of a mobile application for ZIPPY
    Development of a mobile application for ZIPPY
    1143
  • Development of a mobile application for Affhome
    Development of a mobile application for Affhome
    1076
  • Development of a mobile application for the FLAVORS company
    Development of a mobile application for the FLAVORS company
    677

Why Lottie animations stutter on some devices

Lottie animations are vector JSON that the app parses and rasterizes on the device itself at the moment of display. On flagship devices this is unnoticeable, but on weaker devices file parsing, masks, gradients, and layers with transparency fall on the main rendering thread. The interface starts to stutter exactly where the user expects an instant response.

On top of that, the loading order adds to it: vector effects are loaded synchronously with the first display of the screen, and the animation "catches up" with the already rendered interface.

The transition between screens unfolds with a delay, some devices simply skip frames, and Hero transitions and spring animations on top multiply the load on the same thread.

A separate cause is the cache of ready frames: on devices with a small amount of memory it gets evicted, and the same effect is rebuilt from scratch every time the user returns to the screen.

Externally it looks like "it only stutters sometimes," so the problem is long attributed to the network.

The cost shows up in key scenarios — onboarding, adding a product, payment confirmation. A choppy transition reads as "the app is slow," and the user leaves, even though the logic worked correctly.

Such drops are poorly caught on a test fleet: smooth on the bench, consistently stuttering on real devices.

Below we break down how this is addressed: where animations are prepared in advance, where the format is changed, and where rendering is moved off the main thread — so that interface smoothness stops depending on the device model.

A unified interface motion system: what it gives the app

An interface motion system is not a set of effects for each screen, but a library of reusable transitions: timings, easing curves, and behavior when interrupted by a gesture are described once and reused everywhere.

A new screen is assembled from ready-made blocks rather than drawn from scratch, so its release time shrinks from days to hours.

The speed of releasing screens also grows due to removed coordination: the designer and developer no longer discuss the duration and character of each animation, but take a suitable transition and insert content.

Vector rendering Lottie delivers the same picture on both platforms — the same effect does not have to be described and maintained twice.

A separate result is an eliminated class of defects: "stutters on a fast gesture," "jumps after screen rotation," "sticks on a weak device." Transitions that can be interrupted at any moment and calculate position from the current state remove jerks, and the share of devices with smooth rendering is measured separately on the weak segment — that is how you can see that the regression has not returned.

Reusable effects also reduce the number of repeat edits: editing a timing or curve in one place applies to all screens at once rather than being made manually on each.

Gradually the set of transitions turns into a formalized motion language, according to which new screens are assembled without the library author's involvement.

Lottie and Rive animations: which format for which task

The motion format is chosen based on who controls the animation state — a pre-rendered timeline or the app code. Lottie stores a vector scene as a set of layers and keyframes: the player plays it from start to finish with a fixed duration.

Rive describes a state graph where the transition is set not by time but by an input parameter — a tap, progress, a toggle value.

Physical spring transitions and gesture scenarios are not stored in a file at all: the app itself calculates them, tying movement to finger velocity and inertia. Hence the difference in tasks — vector is responsible for decor and storytelling, physics for interface response.

Format When it fits Limitations
Vector (Lottie) Icons, onboarding, illustrations, success and error effects — a linear scenario with a known duration Responds poorly to real-time input: a state change is a swap of a file or segment, not a continuous reaction
Interactive (Rive) Interactive elements: toggles, characters, blocks with state branching More expensive to produce — you need a designer building a state graph rather than drawing a timeline
Physical transitions Navigation between screens, modal appearance, tap response Parameters are selected by an engineer, not a designer; without smoothing they stutter on weak devices
Gesture scenarios Swipes, card dragging, list refresh, undo Hard to synchronize and roll back: movement must follow the finger, not the timeline

In practice, the formats do not compete on one screen: the vector layer covers decor, physics covers navigation, and the interactive format covers elements controlled by the user.

The common limitation is the same — the more layers animate simultaneously, the more noticeable the lag on a weak device.

Implementation stages: from auditing current effects to handover

Animation breaks not in the mockup but in implementation: the effect is drawn in the main rendering loop, drags along extra layers, and on a weak device turns into a jerk.

That is why we carry out interface motion in stages — each one relies on the previous artifact, and the output is a manageable system rather than a set of disconnected effects.

  1. Interface motion audit. We go through the screens and record every transition, list appearance, and tap response: what it is rendered with, where it is duplicated, which screens open longer than others.
  2. Effect scheme. We put into a table the screen, trigger event, duration, curve, and rendering method — Lottie vector animation, frame-by-frame, or native spring. The scheme becomes a dictionary: actions with the same meaning look the same across the entire app.
  3. Rendering optimization. We move static parts into cache, split heavy scenes into independent tracks, and remove decorative layers from the main loop. The effect stops affecting scroll smoothness.
  4. Device testing. We run it on weak models, in dark theme, under power saving, and with the system "reduce motion" setting: the animation should not disappear but be replaced by a short safe variant.
  5. Measurements and regression. We compare screen opening time and the number of dropped frames before and after; the set of checks stays with the team so that new effects are tested against it as well.
  6. Project handover. We hand over the scheme, source files, duration and curve tokens, asset build configuration, and an instruction for "how to add an effect without breaking the others." After a walkthrough with the customer's team, support can be handled in-house.

Post-delivery package: sources, schemes, guidelines

After delivery, the customer keeps not only the assembled app but also a package that lets them develop it without us: below is what exactly is included in the handover and how it is checked at acceptance.

  • Effect source files. Working projects of Lottie vector animations, not just files exported from them: named layers, timings, motion curves, and notes on where the effect is tied to app data.
  • Transition library. Reusable transitions between screens and states — appearance, return, modals, swipe response — assembled so that a new screen plugs in a ready transition instead of drawing its own.
  • Screen connection scheme. A map showing which transition leads from which screen to which, how states differ, and what happens when interrupted by a gesture.
  • Edit rules. What can be changed in the animation file without a rebuild, where the threshold is after which the effect is rebuilt, and who checks the result after an edit.
  • Acceptance procedure. A list of checks: behavior on weak devices, response to interruption, system reduce motion mode, absence of jerks during data loading.
  • Performance guidelines. A budget for duration and number of simultaneous effects plus a list of places where animation is forcibly disabled.

All of this lives in the code repository next to the app, is versioned with it, and is updated with every release. Describe your task — we will come back with an estimate and a handover plan.

Case study: we rewrote interface motion and removed the lag

The project is a delivery service app: 40+ screens, with interface motion assembled from raster storyboards, each with its own timing and curve.

On weak devices, the transition between sections lagged, frames dropped when scrolling a long list, and editing one animation triggered a re-export of graphics.

First we measured what exactly was slowing down: we captured a rendering profile on budget models and broke motion down by layers.

Then we converted scenes to vector formats — Lottie for interface states and Rive for interactive ones — and reduced all transitions to a common set of easing curves.

Metric Before After
Motion scenarios 41 raster sets 12 vector scenes
New screen assembly 3 days for graphics 4 hours
Devices with smooth rendering 62% 97%
Graphics weight in build 14 MB 3.2 MB

What we changed in transitions

We rewrote transitions with spring curves and linked paired screens into continuous motion so that it reads as one object rather than a splice.

We moved animation to a separate layer above the layout, preload heavy scenes when the screen appears and keep them in cache — preparing the next scene no longer blocks rendering.

The lag on budget devices is gone, new screens are assembled from ready-made scenes rather than from scratch for each section. Designers edit the motion scenario themselves, without developers, so the next interface iteration took two weeks instead of two months.

What to do if a finished app already lags on some devices

Yes, it is realistic to embed a motion system into a released app without rewriting it: animation lives in a separate interface layer, so replacing it does not affect logic, networking, or data storage. This is about targeted rework — we change specific screens, not the entire app.

We start with frequent scenarios that the user goes through on every launch: app onboarding, transitions between sections, loading and error states, list refresh, tap response.

Before edits, we take measurements on real devices and find exactly where smoothness is lost: often it is enough to convert heavy frame sequences to Lottie vector animations, and the lag goes away without changing the screen structure.

A separate point is backward compatibility. Older OS versions and weak devices get a simplified motion variant or a static first frame, while the new system is enabled only where it will perform predictably; the user sees no difference, except that the interface stops stuttering.

We implement in stages: one release — one scenario, behind a remote toggle and with instant rollback without releasing a new build. This way, lag on a specific model does not turn into a rollback of the entire release, and the effect of each replacement is visible immediately.

If a finished app lags only on some devices, a full rework is not needed — a plan of several steps with a clear order and checks at each one is enough.

Technical concerns about integrating effects and transitions

Concerns about effects are usually not about "beautiful or not," but about the solution's lifespan: what happens when the format is replaced, who edits the animation after handover, how it behaves on a weak device. We address four common questions.

Can one effect format be replaced with another?

Yes, if the animation is moved to a separate layer rather than hardcoded into the screen logic. A vector format like Lottie is swapped by file: the layout and transitions stay in place.

Replacement is most expensive where the effect is tied to the layout — then the screen itself also has to be edited.

Who maintains the animation after handover?

We hand over effect files, the screen binding scheme, and launch rules. Your team changes color, speed, and duration without us; reworking a transition scenario is a matter of hours, not an app rebuild.

How do effects behave on inexpensive devices?

Heavy effects on a weak device cause a drop in smoothness and heating. We prepare a simplified variant in advance and disable background layers at low battery — the interface remains responsive, and the effect does not disappear.

What if the mockup is already drawn?

We assess it for feasibility: some effects transfer one-to-one, some require simplification for real constraints. The labor intensity of edits depends on the number of unique transitions — the more screens redraw the mockup from scratch, the more work there is.

Let's discuss the task: show the current state of the interface

To make the conversation concrete, we need not the entire project, but a minimal set of data about specific screens and animations. We reproduce the behavior on a device and only after that give an estimate and work plan — otherwise timelines turn into guesses.

  • List of problem screens. Where exactly the animation stutters, the first frame drops, scrolling slows down, or it falls apart on a weak device — screen names according to the mockup and in the app itself.
  • App behavior recordings. A screen recording from a real device, indicating the model and OS version. If the issue is a vector animation, attach the source file that is rendered on that screen.
  • Build links. Access to a test build, a test account, and data under which the defect reproduces consistently — this removes half of the clarifying questions.
  • Mockups and animation sources. The project in the original editor, layer breakdown, and an indication of what exactly should move and what remains static.
  • List of requirements. Platforms, minimum OS versions, app size and battery consumption constraints, animation references — and what specifically you like about them.
  • Timeline requirements. By what date the release is needed, whether it is tied to an external event, and whether you are ready to accept intermediate builds with partial changes.

As a result, you get an estimate and a work plan: stages, what we do, what is needed from your team, and the next step with a date. Describe the task — we will come back with a proposal.