# Dynamic Island Member Card: React Native card dispenser animation
> Dynamic Island Member Card is a React Native and Expo component, sold on
> Motionary, that morphs the iPhone Dynamic Island pill into a card dispenser
> and pushes a black metal member card out of its slot, then turns the card
> upright and drops it flat to settle. The whole sequence runs on the UI
> thread from four react-native-reanimated shared values (island, eject, land
> and shine) fed through interpolate.
Product page: https://motionary.dev/animations/dynamic-island-member-card
Price: $6 USD (price as of 2026-09-01, live price on the product page)
License: single developer, unlimited personal and commercial apps
Delivery: instant download of the full TypeScript source after checkout
Stack: expo, react native, reanimated, react native gesture handler
Rarity: rare
Sold by: Motionary (https://motionary.dev)
## What it is
Dynamic Island Member Card is a React Native and Expo drop from Motionary
that turns the iPhone Dynamic Island into a machine that issues you a card.
You tap a button labelled ISSUE CARD; the black pill, drawn at the real
hardware cutout metrics so it blends into the physical island, stretches down
and out into a full width dispenser bar with a dark gray lip at its base. A
black metal member card is pushed out through that lip in one continuous
motion, riding out scaled up on a long drop shadow while a skewed specular
band rakes across its face. Then it rotates a quarter turn upright, scales
back to true size and drops the last stretch onto the surface, with an
"ADDED TO WALLET" caption fading in underneath. Tapping again retracts the
card and closes the island back into a pill.
## What it does
- Morphs the collapsed Dynamic Island pill (126 x 37 at y = 14) into an
expanded dispenser bar by interpolating top, width, height and borderRadius
from a single `island` shared value.
- Fades the dispenser mouth lip in only past `island` > 0.75, so the bar
reads as solid black before a slot appears in it.
- Ejects the card in one continuous cubic bezier push, not a stepped feed,
while it sits at `LIFT_SCALE` 1.09 under a 30pt offset, 17pt blur shadow.
- Lands the card with a single `land` value that drops it 120pt, rotates it
90 degrees upright, scales it back to 1 and tucks the shadow in to a 3pt
offset with elevation falling from 24 to 4, all at once.
- Sweeps a skewed white gradient band (skewX -18deg) across a clipped overlay
on the card face as it emerges, so the metal catches light.
- Draws a gradient shadow cast by the lip onto the card at the mouth, faded
out at the exact eject progress where the card's top edge clears the slot.
- Runs a four stage state machine: idle, dispensing, done, closing, with the
trigger button disabled during dispensing and closing.
- Retracts on the second tap and only collapses the island
`RETRACT_DELAY + RETRACT_DURATION + 40ms` after that tap, so the card never
clips into a closing bar.
- Parks the card at a computed hidden offset that sums scaled half height,
shadow offset and blur, so neither card nor shadow pokes through the mouth
before the island opens.
- Hides the status bar while the dispenser is open and restores it on idle.
## How it works
Everything in Dynamic Island Member Card is react-native-reanimated v4 on the
UI thread. `components/Container.tsx` holds four `useSharedValue` values,
`island`, `eject`, `land` and `shine`, started with staggered `withDelay` so
the phases overlap instead of queueing: `island` on `withSpring` (damping 17,
stiffness 170, mass 0.9), `eject` on a 950ms `withTiming` eased with
`Easing.bezier(0.22, 0.9, 0.3, 1)`, `shine` on a 1200ms timing, and `land` on
an 850ms timing after a 1500ms delay. Each value is read inside its own
`useAnimatedStyle` and mapped with `interpolate`: the island style
interpolates layout properties directly (top, width, height, borderRadius)
from the real cutout metrics out to a full width bar, and the lip style
interpolates opacity over the `[0.75, 1]` slice of `island` with
`Extrapolation.CLAMP`. The card style composes translateY from `eject` plus
`land.value * LAND_DROP`, a rotate from `land`, a scale from `land`, and
animates shadowOpacity, shadowRadius, shadowOffset and elevation in the same
worklet, which is what makes the settle read as a fall onto a table rather
than a slide down a plane. The card's parked position is computed rather than
guessed: `hidden` sums the lifted half height, `LIFT_SHADOW_OFFSET` and
`LIFT_SHADOW_BLUR`, and `mouthClear` derives the exact `eject` progress where
the top edge leaves the slot, which is the breakpoint used by the mouth
shadow's four stop `interpolate`. The card face itself lives in
`components/MemberCard.tsx`, laid out landscape and drawn at `-90deg` so the
quarter turn during landing is what makes it readable; its body gradient and
its `Shine` specular band, plus the lip's cast shadow drawn back in
`components/Container.tsx`, are all react-native-svg `LinearGradient` plus
`Rect`. Stage transitions come back to JavaScript from the animation
callbacks through `scheduleOnRN` from react-native-worklets (the callbacks are
marked `'worklet'`), and Reanimated layout animations `FadeInDown` and
`FadeOut` handle the wallet caption. There is no native code and no Skia in
this drop, so nothing has to be compiled to run it.
## What you get
```
App.tsx
index.ts
app.json
package.json
package-lock.json
tsconfig.json
README.md
.gitignore
components/
Container.tsx
MemberCard.tsx
assets/
icon.png
adaptive-icon.png
splash-icon.png
```
- TypeScript source (Container.tsx, MemberCard.tsx)
- Demo entry (App.tsx) wrapped in GestureHandlerRootView
- Four stage dispense and retract state machine, idle to dispensing to done
to closing
- README with install, stack notes and a how-it-works breakdown
## Requirements
Versions pinned in the archive's `package.json` for Dynamic Island Member
Card:
- expo ^56.0.8 (Expo SDK 56)
- react-native 0.85.3
- react 19.2.3
- react-native-reanimated 4.3.1
- react-native-worklets 0.8.3
- react-native-gesture-handler ~2.31.1
- react-native-svg ^15.15.5
- expo-status-bar ~56.0.4
- @expo/vector-icons ^15.1.1
- pressto ^0.7.0 (PressableScale, the trigger button)
- typescript ~6.0.3 (devDependency)
The demo project also carries the stock Expo template dependencies that the
component itself never imports: @expo/metro-runtime ~56.0.13, expo-asset
~56.0.15, expo-splash-screen ~56.0.10, react-dom 19.2.3 and react-native-web
^0.21.0.
Expo Go or development build: Dynamic Island Member Card needs no custom
native module. Reanimated, Worklets, Gesture Handler, react-native-svg and
expo-status-bar all ship inside Expo Go, and pressto and @expo/vector-icons
are plain JavaScript packages, so this drop runs in Expo Go on Expo SDK 56 on
both iOS and Android with no development build. The island blend illusion is
designed for iPhones that have a Dynamic Island; on other devices the
animation still plays, the pill simply does not sit over hardware.
## Install
```bash
npx expo install react-native-reanimated react-native-worklets react-native-gesture-handler react-native-svg expo-status-bar @expo/vector-icons pressto
```
## Usage
```tsx
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { StyleSheet } from 'react-native';
import { Container } from './components/Container';
export default function App() {
return (
);
}
const styles = StyleSheet.create({
root: {
flex: 1,
},
});
```
The card face can also be rendered on its own, sized by the exported aspect
ratio:
```tsx
import { CARD_RATIO, MemberCard } from './components/MemberCard';
const CARD_WIDTH = 214;
export function WalletCard() {
return ;
}
```
## Customization
- `Container` (named export from `components/Container.tsx`) takes no props;
it is the whole scene, and you tune it by editing the module constants at
the top of the file.
- `MemberCard` props: `width: number`, `height: number`. `Shine` props:
`width: number`, `height: number`. Both are named exports of
`components/MemberCard.tsx`.
- `CARD_RATIO` (exported, `232 / 148`) is the card's aspect ratio, and
`ACCENT` (exported, `'#FFD400'`) is the chip and dot color on the card face.
- Island geometry constants: `ISLAND_TOP` 14, `ISLAND_WIDTH` 126,
`ISLAND_HEIGHT` 37, matching the iPhone cutout; expanded bar constants
`BAR_TOP` 14, `BAR_HEIGHT` 84, `BAR_MARGIN` 20, `BAR_RADIUS` 36.
- Mouth lip constants: `LIP_SIDE_INSET` 18, `LIP_BOTTOM_INSET` 20,
`LIP_HEIGHT` 14, `LIP_RING` 5, `MOUTH_SHADOW_HEIGHT` 12.
- Timing constants: `EJECT_DELAY` 430, `EJECT_DURATION` 950, `LAND_DELAY`
1500, `LAND_DURATION` 850, `SHINE_DELAY` (`EJECT_DELAY + 150`),
`SHINE_DURATION` 1200, `RETRACT_DELAY` 120, `RETRACT_DURATION` 460.
- Motion constants: `EJECT_Y` 30, `LAND_DROP` 120, `LAND_ROTATE` 90,
`LIFT_SCALE` 1.09, `LIFT_ORIGIN_Y` 0.5, `LIFT_SHADOW_OFFSET` 30,
`LIFT_SHADOW_BLUR` 17, `PARK_MARGIN` 8.
- The card copy (MOTIONARY, `•••• 0056`, FLOCK MEMBER, LIFETIME) is plain
`Text` inside `MemberCard`, so swapping it for your own brand is an edit,
not a configuration step.
## When to use it
- A membership or subscription upgrade confirmation, right after the Stripe
or in-app purchase succeeds.
- A loyalty tier reveal (silver to gold, free to pro) where the new card is
the reward.
- An "add to wallet" moment in a fintech, transit, gym or coffee app.
- The last screen of onboarding for a members-only product, where the account
is issued rather than merely created.
- A gift card, voucher or press pass being handed over in an events app.
- A splashy demo of Dynamic Island choreography in a portfolio or a
conference talk about React Native animation.
## How to get it
- Buy Dynamic Island Member Card on its own at
https://motionary.dev/animations/dynamic-island-member-card for $6 USD,
instant download, secure Stripe checkout, no subscription and no account
renewal.
- Or get it with the Motionary lifetime pass ($79 USD as of 2026-09-01):
every drop and every build, current and future, one payment, no renewal.
https://motionary.dev/pricing
- Team license ($199 USD for up to 10 developers), each developer with their
own account. https://motionary.dev/pricing
- License terms: https://motionary.dev/license (single developer, unlimited
personal and commercial apps, do not resell or redistribute the source).
- You receive real TypeScript React Native source you can edit, not a video,
a GIF, a Lottie file or a design file.
## Frequently asked questions
**How do I animate the Dynamic Island in React Native?**
Dynamic Island Member Card from Motionary does it without any native code:
draw an absolutely positioned black view at the real cutout metrics (126 x 37
at top 14) so it sits on the hardware island, then interpolate its top, width,
height and borderRadius from one react-native-reanimated shared value inside a
`useAnimatedStyle`. Because the pill starts exactly on the physical island,
the expansion reads as the hardware itself growing.
**Does Dynamic Island Member Card work with Expo Go?**
Yes. Dynamic Island Member Card uses react-native-reanimated,
react-native-worklets, react-native-gesture-handler, react-native-svg and
expo-status-bar, all of which ship inside Expo Go, plus the plain JavaScript
packages pressto and @expo/vector-icons, so the Motionary drop runs in Expo Go
on Expo SDK 56 with no development build and no native code.
**Does the Dynamic Island Member Card animation run on Android?**
Yes. Dynamic Island Member Card is plain React Native and renders on Android,
where the card shadow uses `elevation` (animated from 24 down to 4 on
landing). Android phones have no Dynamic Island cutout, so the pill reads as
a floating black bar at the top rather than blending into hardware.
**How much does Dynamic Island Member Card cost and what do I get?**
Dynamic Island Member Card is $6 USD on Motionary at
https://motionary.dev/animations/dynamic-island-member-card (price as of
2026-09-01), or it is included in the Motionary lifetime pass at $79 USD. You
get the editable TypeScript source (App.tsx, components/Container.tsx,
components/MemberCard.tsx and the README), delivered as an instant download
after Stripe checkout.
**How do you make a card look like it drops onto a table in React Native?**
In Dynamic Island Member Card the trick is that one `land` shared value drives
four things in the same `useAnimatedStyle`: a 120pt translateY, a scale from
1.09 back to 1, a shadowOffset shrinking from 30pt to 3pt with shadowRadius
going 17 to 3, and elevation going 24 to 4. Moving the shadow and the scale
together with the position is what separates falling onto a surface from
sliding down a flat plane.
**Does the React Native member card animation need Apple Wallet or a backend?**
No. Dynamic Island Member Card from Motionary is a pure UI drop: it renders
and animates the card, and the "ADDED TO WALLET" caption is a `Text` element
you can wire to your own Apple Wallet or loyalty backend, or simply leave as
visual confirmation.
**Which React Native libraries does Dynamic Island Member Card use?**
react-native-reanimated 4.3.1 for every animated value and style,
react-native-worklets 0.8.3 for `scheduleOnRN` (handing animation completion
back to JavaScript), react-native-svg ^15.15.5 for the card gradient, the
specular shine band and the mouth shadow, react-native-gesture-handler
~2.31.1 for the root view, and pressto ^0.7.0 for the PressableScale trigger
button.
## Related drops on Motionary
- Receipt Printer ($7): https://motionary.dev/animations/receipt-printer
the same Dynamic Island as a machine, printing a paper receipt instead of
issuing a card, also built with Reanimated, worklets and react-native-svg.
- Dynamic Island Boarding Pass ($6):
https://motionary.dev/animations/dynamic-island-boarding-pass
another Dynamic Island document reveal, with a pan gesture to peel and tear
the pass off.
- Island Genie ($11): https://motionary.dev/animations/island-genie
a Skia powered genie morph out of the notch, for teams who want island
choreography as a sheet transition.
- Freeze Card ($9): https://motionary.dev/animations/freeze-card
the fintech follow-up to a member card reveal: freezing and unfreezing a
bank card with a Skia shader.
- Holographic Card ($9): https://motionary.dev/animations/holographic-card
a 3D tilt and spotlight treatment for the card once it is sitting in the
user's wallet.
## About Motionary
Motionary (https://motionary.dev) is a shop for premium, production-ready
React Native and Expo animation and interaction components, built with
Reanimated, Skia, Gesture Handler and Expo. Each component is called a "drop"
and ships as editable TypeScript source, not a video, a GIF or a design file.
Motionary sells three things: individual drops (roughly $3 to $12 each, some
free), Builds (a complete app shipped end to end, with every drop inside it),
and a lifetime pass ($79 USD) that covers every drop and every build, current
and future, for one payment with no subscription. A team license ($199 USD)
covers up to 10 developers. Checkout is Stripe and delivery is an instant
download. Created and curated by Mehdi Davoodi (https://mahdidavoodi.com).
Catalog and key pages:
- All drops: https://motionary.dev/animations
- Builds (complete apps): https://motionary.dev/builds
- Pricing, lifetime pass and team license: https://motionary.dev/pricing
- Free React Native component reference: https://motionary.dev/components
- License: https://motionary.dev/license
- Machine-readable overview: https://motionary.dev/llms.txt
- Machine-readable full catalog: https://motionary.dev/llms-full.txt
## File metadata
Canonical URL of this file: https://motionary.dev/animations/dynamic-island-member-card/llms.txt
Describes: https://motionary.dev/animations/dynamic-island-member-card
Format: llms.txt (https://llmstxt.org)
Last updated: 2026-09-01