Motion System Guidelines
Animation and transition specifications for Material Design 3.
Motion Principles
Four Core Characteristics
| Principle |
Description |
| Responsive |
Quickly responds to user input at the point of interaction |
| Natural |
Follows real-world physics (gravity, friction, momentum) |
| Aware |
Elements are aware of surroundings and other elements |
| Intentional |
Guides focus to the right place at the right time |
Duration Guidelines
By Interaction Type
| Type |
Duration |
Usage |
| Micro |
50-100ms |
Ripples, state changes, hover |
| Short |
100-200ms |
Simple transitions, toggles |
| Medium |
200-300ms |
Expanding, collapsing, revealing |
| Long |
300-500ms |
Complex choreography, page transitions |
By Device Type
| Device |
Typical Duration |
Adjustment |
| Mobile |
300ms |
Baseline |
| Tablet |
390ms |
+30% slower |
| Desktop |
150-200ms |
Faster, more responsive |
| Wearable |
210ms |
-30% faster |
Duration Rules
- Maximum: Keep under 400ms for most transitions
- User-initiated: Faster (closer to instant feedback)
- System-initiated: Can be slightly longer
- Loading states: Use indeterminate indicators for unknown duration
Easing Curves
Standard Curves
| Curve |
Usage |
Characteristics |
| Standard |
Most common transitions |
Quick acceleration, slow deceleration |
| Emphasized |
Important/significant transitions |
More dramatic curve |
| Decelerate |
Elements entering screen |
Starts fast, ends slow |
| Accelerate |
Elements leaving screen permanently |
Starts slow, ends fast |
| Sharp |
Elements temporarily leaving |
Quick, snappy motion |
Curve Values (Cubic Bezier)
| Curve |
Value |
| Standard |
cubic-bezier(0.2, 0.0, 0.0, 1.0) |
| Emphasized |
cubic-bezier(0.2, 0.0, 0.0, 1.0) |
| Decelerate |
cubic-bezier(0.0, 0.0, 0.0, 1.0) |
| Accelerate |
cubic-bezier(0.3, 0.0, 1.0, 1.0) |
Movement Patterns
Arc Motion
- Use natural, concave arcs for diagonal movement
- Single-axis movement (horizontal/vertical only) stays straight
- Elements entering/exiting screen move on single axis
Choreography
- Stagger: Offset timing for related elements (20-40ms between)
- Cascade: Sequential reveal from a focal point
- Shared motion: Elements that move together maintain relationship
Transition Patterns
Container Transform
Best for: Navigation from card/list item to detail screen
- Origin container morphs into destination
- Maintains visual continuity
- Content fades during transformation
Shared Axis
Best for: Same-level navigation (tabs, stepper)
| Axis |
Direction |
Usage |
| X-axis |
Horizontal |
Tabs, horizontal paging |
| Y-axis |
Vertical |
Vertical lists, feeds |
| Z-axis |
Depth |
Parent-child relationships |
Fade Through
Best for: Unrelated screen transitions
- Outgoing content fades out
- Incoming content fades in
- Brief overlap period
- No shared elements
Fade
Best for: Show/hide single elements
- Simple opacity change
- Optionally combine with scale
- Quick duration (100-200ms)
Component-Specific Motion
FAB
| State |
Animation |
| Appear |
Scale up + fade in |
| Disappear |
Scale down + fade out |
| Transform |
Morph to extended FAB |
| Press |
Elevation change (3dp → 8dp) |
Bottom Sheet
| State |
Animation |
| Expand |
Slide up with decelerate curve |
| Collapse |
Slide down with accelerate curve |
| Dismiss |
Swipe down with velocity-based duration |
Navigation
| Pattern |
Animation |
| Push |
Incoming slides from right, outgoing shifts left |
| Pop |
Incoming slides from left, outgoing shifts right |
| Modal |
Slide up from bottom |
Cards
| State |
Animation |
| Expand |
Container transform to detail |
| Press |
Subtle elevation increase |
| Reorder |
Follow finger with physics |
Loading & Progress
Indeterminate Indicators
- Use for unknown duration
- Continuous, looping animation
- M3 Expressive: Customizable waveform and thickness
Determinate Indicators
- Use when progress is measurable
- Smooth, linear progression
- Update frequently for responsiveness
Skeleton Screens
- Show layout structure immediately
- Subtle shimmer animation
- Replace with content as it loads
Accessibility Considerations
Reduced Motion
- Respect prefers-reduced-motion setting
- Provide alternatives:
- Instant transitions (no animation)
- Simple fade instead of complex motion
- Static loading indicators
Motion Duration
- Keep essential feedback < 100ms
- Avoid motion that could trigger vestibular issues
- Test with motion sensitivity settings enabled
Implementation Notes
Android Animation APIs
| API |
Usage |
| MotionLayout |
Complex, coordinated animations |
| Transition |
Activity/Fragment transitions |
| Animator |
Property animations |
| AnimatedContent |
Compose content transitions |
| animateContentSize |
Compose size changes |
Performance Tips
- Use hardware layers for complex animations
- Avoid animating layout properties (use transform)
- Profile with GPU rendering tools
- Target 60 FPS (16ms per frame)