Presets
A preset is motion that does not need to know what it is animating. Every one of them works on a built-in icon, on your own path data, and on a MotionIconDefinition you assembled yourself.
<shiny:MotionIconView Icon="star" Motion="Tada" Trigger="Hover" /><shiny:MotionIconView PathData="M12 2 3 20h18z" Motion="Pop" Trigger="Press" /><MotionIcon Icon="star" Motion="MotionPreset.Tada" />| Preset | Motion |
|---|---|
Default |
The motion drawn for this icon, falling back to Pulse for artwork that has none. |
None |
Nothing moves. Useful for pinning an icon to a static state. |
Pulse |
Swells and settles. |
Beat |
A double thump, on the rhythm of a heartbeat. |
Spin |
One full turn. |
Shake |
Side to side. |
Wobble |
Rocks back and forth, damping out. |
Bounce |
Hops, landing with a bounce. |
Float |
Drifts gently up and down. |
Pop |
Dips, springs past its resting size, settles. |
Tada |
Grows while wiggling — the “look at me” one. |
Flip |
Turns over horizontally. |
Swing |
Swings from its top edge, like something hanging. |
Blink |
Fades out and back. |
Draw |
Draws each stroke on in turn, then holds. |
Nudge |
Slides right and returns — a directional hint. |
Jiggle |
Short, sharp rotations. |
Default is not a preset so much as a fallback chain
Section titled “Default is not a preset so much as a fallback chain”Default asks the icon for its own motion first. That is why Icon="bell" rings rather than merely pulsing, and why the same property on a bare PathData glyph still does something sensible — it lands on Pulse.
Set Motion explicitly whenever you want the icon to move the same way as the ones around it rather than expressing what it means.
Draw is the odd one out
Section titled “Draw is the odd one out”Every other preset drives the icon as a whole, which is exactly why they work on unknown artwork. Draw has to reach into the parts, because drawing a multi-stroke icon on all at once looks like a mistake rather than an effect — so it staggers them, giving each part its own window in the cycle.
Parts that are stroked are trimmed on; parts that are filled are faded in, because trimming a filled shape would simply pop it into existence at the end of its window.
Retiming
Section titled “Retiming”Duration overrides the length of one cycle without touching the keys, since offsets are normalised:
<shiny:MotionIconView Icon="loader" Motion="Spin" Duration="0:0:0.6" Trigger="Loop" />Speed is a multiplier over the top of that. On MAUI a negative Speed runs the animation backwards.
On the web, retiming costs nothing extra: duration and repeat count are passed as CSS custom properties rather than baked into the generated stylesheet, so the same motion at two different speeds compiles to one stylesheet shared by both instances. Adding an Interval does produce a different one, because a resting gap genuinely changes the keys.


