我正在尝试为一个带有可滚动视图的屏幕上的消息动画。从我的flatlist组件中单击onButtonClick
,可以很好地发挥作用。但是存在一个小问题,因为Animated.View
位置绝对始终在屏幕顶部,因此,由于这是flatlist的最高元素,因此无法单击。我尝试了Zindex,似乎没有影响。如何修复单击动画现在的工作?
//styles
notification: {
position: 'absolute',
top: 50,
alignSelf: 'center',
zIndex: 100
},
notificationWrapper: {
height: 100,
width: 270,
backgroundColor: 'rgba(255,255,255,1)',
borderRadius: 10,
marginTop: 40,
marginBottom: 40,
marginLeft: 28,
marginRight: 28,
flexDirection: 'row',
alignItems: 'center',
paddingLeft: 28
}
//js
onButtonClick = () => {
this.fadeIn.setValue(0);
Animated.timing(
this.fadeIn,
{
toValue: 1,
duration: 1000,
}
).start(() => {
setTimeout(() => {
this.fadeOut();
}, 2000);
});
}
fadeOut = () => {
this.fadeIn.setValue(1);
Animated.timing(
this.fadeIn,
{
toValue: 0,
duration: 1000,
}
).start();
}
<Fragment>
<ScrollView style={[styles.mainContainer, {flex: 1}]}>
<FlatList
style={{ paddingTop: 10, paddingLeft: 20, paddingRight: 20 }}
data={favouriteData}
keyExtractor={this.keyExtractor}
renderItem={this.rendeCampus}
/>
</ScrollView>
<Animated.View
style={[styles.notification, {opacity: this.fadeIn, zIndex:
this.fadeIn}]}
>
<View style={styles.notificationWrapper}>
<Text style={{
fontSize: 12,
lineHeight: 15,
color: 'rgba(42,36,66,1)',
width: 270
}}>This restaurant has been added to your favourites list</Text>
</View>
</Animated.View>
</Fragment>
我猜其他所有内容都在默认情况下zIndex: 0
尝试使用这样的插值:
this.zAnimate = this.fadeIn.interpolate({
inputRange: [ 0, 1],
outputRange: [-1, 9]
})
并将this.zAnimate
分配给您的zIndex
。您可能必须根据想要何时褪色的何时逐步使用OutputRange,然后进入前面。
您可能需要使用transform
推开视图。例如。
this.fadeIn.setValue(1);
Animated.timing(
this.fadeIn,
{
toValue: 0,
duration: 1000,
}
).start(() => {
this.transform.setValue(-200);
});