Files
skills/android-native-dev/references/motion-system.md
shihao 6487becf60 Initial commit: add all skills files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 16:52:49 +08:00

5.3 KiB

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)