When a schedule slips, animation is the first line struck from the list. It is filed under polish. That misreads what it does. Motion is how an interface tells a person where something came from, what changed and what will happen if they let go.
A Statistic We Deleted
Our article on this subject used to open with a number: apps with good motion scoring 23 percent higher on perceived quality, credited to a vendor study. We went looking for the study and did not find it. The number is gone. The case for motion does not rest on it, and a leadership team should be wary of any design argument that does.
Interruption Is the Real Test
Users do not wait for animations to finish. They tap again, drag back, change their mind. Motion built on fixed durations stutters when that happens. Motion built on physics does not, and the platform documentation explains why: "spring can handle interruptions more smoothly than duration-based AnimationSpec types because it guarantees the continuity of velocity" (Android). The feeling of quality people describe is mostly this.
Where It Costs You
Animation runs on every frame, so careless animation is careless many times a second. The platform's rule is to do the work as late as possible: "Deferring state reads will ensure that Compose re-runs the minimum possible code on recomposition." (Android).
There is an accessibility trap as well. Fading something to invisible does not remove it. In Google's words, "the composable remains in the composition and continues to occupy the space it's laid out in." (Android). A screen reader user can still land on a control a sighted user can no longer see.
What to Ask Your Team
- What does each animation tell the user? If the answer is nothing, cut it.
- What happens when someone interrupts it? Try it on the real product.
- Do hidden elements actually leave, or only fade?
- Which claims in our design rationale have a source?
-Rocky
#ProductDesign #UserExperience #MobileEngineering #EngineeringDreams #StrategiaX
Originally published on ANDROID-ARCHITECT, the Android engineering blog of Strategia-X, with the code and the corrected samples.
