Топографическая карта из тонких изолиний и более жирных горизонталей. Рельеф медленно течёт, а там, где склон круче, линии сгущаются и становятся ярче. Палец (или курсор в вебе) работает как гравитационный колодец: закручивает и раздвигает линии вокруг себя и тянет их вслед за движением. Когда касания нет, колодец сам медленно блуждает по карте.
Изолинии считаются шейдером Skia на GPU с учётом плотности пикселей, поэтому линии остаются тонкими на любом экране; время и следование за пальцем идут на UI-потоке Reanimated. Анимация замирает при «Уменьшении движения», в фоне, при paused или (в вебе) вне экрана. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerpnpm add @shopify/react-native-skia react-native-reanimated react-native-gesture-handleryarn add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerbun add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerСкопируйте эти файлы в src/shared/components/organisms/topography/:
Код доступен по подпискеPro
Исходник «Топография» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Топография» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Компонент растягивается на размер родителя (flex: 1); interactive={false} отключает реакцию на касание.
speed?Тип number
density?Тип number
color?Тип string
majorEvery?Тип number
interactive?Тип boolean
paused?Тип boolean
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>