dissolve
Disintegrates into grain, speck by speck.
The full recording — the example app on an Android
emulator and an iOS simulator at once, with dissolve played several times
over. Scrub or pause with the controls.
Cells drop out of the old screen in a fixed noise order until nothing is left. One of the four kinds built on the mask ladder: a stack of mask frames pre-built once, off the main thread, and cached — playing the effect is then one image assignment per frame.
Options it takes
| Option | Type | Default | What it does here |
|---|---|---|---|
durationMs |
number |
650 |
Animation length. Clamped up to this kind’s floor; 0 means no animation and is never clamped. |
settleFrames |
number |
2 |
Display frames to hold the snapshot before revealing, so the theme swap has painted underneath. |
Ignored by this kind: origin, direction, angleDeg, shape, blurStyle, bands. Passing them is harmless.
Minimum duration
A request below 420ms is clamped up to it, natively, so both
platforms agree. Below that floor a full-screen copy coming apart has too few frames to
read as motion — the eye gets the start and the end and nothing in between, which looks
like a flicker rather than a fast transition. durationMs: 0 still means “no
animation” and is never clamped.
Usage
withThemeTransition(applyTheme, {
kind: 'dissolve',
durationMs: 650,
});
How it is done
| iOS | pre-built noise masks, CAKeyframeAnimation |
|---|---|
| Android | ALPHA_8 mask composited DST_IN |