Аватары участников по очереди влетают из-за края кадра — крупные, размытые и повёрнутые — и пружинно встают на свои места по кругу. В раскладке «розетка» первый аватар становится центральным, и по нему периодически пробегает блик. Когда группа собрана, кольцо начинает медленно вращаться, а сами аватары остаются ровными.
Радиус кольца подбирается под число участников и размер аватаров, а сам компонент ужимается под ширину контейнера. Анимацию можно повторить, сменив replayKey, или включить автоповтор. При «Уменьшении движения» аватары просто проявляются на местах без полёта и вращения. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install expo-linear-gradient react-native-reanimatedpnpm add expo-linear-gradient react-native-reanimatedyarn add expo-linear-gradient react-native-reanimatedbun add expo-linear-gradient react-native-reanimatedСкопируйте эти файлы в src/shared/components/molecules/avatar-cluster/:
Код доступен по подпискеPro
Исходник «Кластер аватаров» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Кластер аватаров» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
images принимает адреса, require(...) или объекты { src, alt }.
imagesТип readonly (TAvatarSource | IAvatarClusterImage)[]
layout?Тип "rosette" | "ring"
size?Тип number
avatarSize?Тип number
ringRadius?Тип number
overlap?Тип number
centerGap?Тип number
centerScale?Тип number
startAngle?Тип number
scatterSpread?Тип number
scatterSeed?Тип number
scatterBlur?Тип number
scatterScale?Тип number
scatterOpacity?Тип number
spring?Тип IAvatarClusterSpring
stagger?Тип number
delay?Тип number
orbit?Тип number | false
glare?Тип boolean
autoReplay?Тип number | false
replayKey?Тип Key
ringColor?Тип string
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>