问题描述
This 是我想要实现的确切动画
我正在尝试使用Animated API来实现Carousel动画。 我目前的进展部分基于Advanced React Native FlatList animations at 60fps with Animated API。 区别在于,我只在react-native-paper中渲染3张卡片,因此尝试在ScrollView中实现它。
我想为3张卡片建立索引,类似于使用FlatList中的renderItem。
我尝试设置索引onScroll,即:
onScroll={(event) => {
Animated.event([{ nativeEvent: { contentOffset: { x: scrollX } } }],{
useNativeDriver: true,})
setIndex(parseInt(event.nativeEvent.contentOffset.x / Dimensions.get('window').width))
}}
但这并没有成功,因为它会为所有3张卡片设置动画
完整代码:
export default function SellerDash({ navigation }) {
const [index,setIndex] = useState(0)
const AnimatedCard = Animated.createAnimatedComponent(Card)
const scrollX = React.useRef(new Animated.Value(0)).current
const inputRange = [(index - 2) * ITEM_SIZE,(index - 1) * ITEM_SIZE,index * ITEM_SIZE]
const translateY = scrollX.interpolate({
inputRange,outputRange: [0,-20,0],})
return (
<>
<SafeAreaView style={styles.container}>
<Animated.ScrollView
showsHorizontalScrollIndicator={false}
horizontal
contentContainerStyle={{
alignItems: 'center',}}
snapToInterval={ITEM_SIZE}
snapToAlignment="start"
decelerationRate={0}
bounces={false}
onScroll={(event) => {
Animated.event([{ nativeEvent: { contentOffset: { x: scrollX } } }],})
setIndex(parseInt(event.nativeEvent.contentOffset.x / Dimensions.get('screen').width))
}}
scrollEventThrottle={16}
>
<AnimatedCard style={{ ...styles.card,transform: [{ translateY }] }}>
<Card.Cover
style={styles.image}
source={{
uri:
'https://images.example.com/1',}}
/>
</AnimatedCard>
<AnimatedCard style={{ ...styles.card,transform: [{ translateY }] }}>
<Card.Cover
style={styles.image}
source={{ uri: 'https://images.example.com/2' }}
/>
</AnimatedCard>
<AnimatedCard style={{ ...styles.card,transform: [{ translateY }] }}>
<Card.Cover
style={styles.image}
source={{
uri:
'https://images.example.com/3',}}
/>
</AnimatedCard>
</Animated.ScrollView>
</SafeAreaView>
</>
)
}
任何帮助将不胜感激:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)