Три семейства тонких световых полос плавно изгибаются по кадру, и каждая раскладывается на цветные края, как свет, прошедший сквозь стекло. Поверх ложится лёгкая виньетка и зерно. Эффект не требует касаний и подходит как фон для заголовка: затемнение центра приглушает полосы там, где стоит текст.
Шейдер считается целиком на GPU через Skia, время идёт на UI-потоке Reanimated — React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения», приложение свёрнуто или передан paused. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-reanimatedpnpm add @shopify/react-native-skia react-native-reanimatedyarn add @shopify/react-native-skia react-native-reanimatedbun add @shopify/react-native-skia react-native-reanimatedСкопируйте эти файлы в src/shared/components/organisms/prism/:
Код доступен по подпискеPro
Исходник «Призма» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Призма» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
По умолчанию компонент занимает ширину родителя и высоту height. Чтобы растянуть его фоном на весь экран, передайте fill. tint и background задаются тройками RGB от 0 до 1.
speed?Тип number
dispersion?Тип number
clearCenter?Тип boolean
tint?Тип PrismRGB
background?Тип PrismRGB
exposure?Тип number
grain?Тип number
paused?Тип boolean
fill?Тип boolean
width?Тип number
height?Тип number
borderRadius?Тип number
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>