Экран плеера выгнут, как в кинотеатре: верх и низ кадра прогибаются дугой, а края слегка затемнены. Позади экрана светится размытая подсветка, собранная из текущего кадра видео через Skia, и меняет цвет вместе с картинкой.
Если провести пальцем по экрану (в вебе — навести курсор), он плавно наклоняется на пружине и возвращается на место после отпускания. Нажатие на кнопку запускает видео через expo-video. При «Уменьшении движения» наклон отключается. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @react-native-masked-view/masked-view @shopify/react-native-skia expo-asset expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgpnpm add @react-native-masked-view/masked-view @shopify/react-native-skia expo-asset expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgyarn add @react-native-masked-view/masked-view @shopify/react-native-skia expo-asset expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgbun add @react-native-masked-view/masked-view @shopify/react-native-skia expo-asset expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgСкопируйте эти файлы в src/shared/components/organisms/curved-video-player/:
Код доступен по подпискеPro
Исходник «Изогнутый видеоплеер» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Изогнутый видеоплеер» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
srcТип CurvedVideoSource
title?Тип string
curve?Тип number
cornerRadius?Тип number
fit?Тип CurvedVideoFit
ambient?Тип boolean
ambientStrength?Тип number
ambientSpread?Тип number
startMuted?Тип boolean
loop?Тип boolean
tilt?Тип boolean
style?Тип StyleProp<ViewStyle>