我有一个简单的图像按钮,可以在onTouchStart和onRelease上更改其图像。在iO上,它的工作方式与预期的一样,但在Android上,当图像发生变化时,按钮会闪烁。 看起来,如果每次我触摸它时都必须再次加载图像。
class MyApp extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<View style={ styles.container }>
<ImageButton
style={ styles.button }/>
</View>
);
}
}
class ImageButton extends React.Component {
constructor(props: {}) {
super(props);
this.image = {
normal: require('./img/button.png'),
highlight: require('./img/button-touched.png')
};
this.state = {
image: this.image.normal
};
}
onTouchStart() {
// do some stuff
// set the highlighted image
this.setState({
image: this.image.highlight
});
}
onTouchEnd() {
this.setState({
image: this.image.normal
})
}
onTouchCancel() {
this.setState({
image: this.image.normal
});
}
componentWillReceiveProps(nextProps) {
this.setState({
image: nextProps.image.normal
});
}
render() {
return (
<View style={ this.props.style }
onStartShouldSetResponder={ () => true }
onResponderGrant={ this.onTouchStart.bind(this) }
onResponderRelease={ this.onTouchEnd.bind(this) }
onResponderTerminate={ this.onTouchCancel.bind(this) }
onResponderReject={ this.onTouchCancel.bind(this) }>
<Image style={ styles.image } source={ this.state.image } resizeMode="stretch" />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#E4E4E4',
},
button: {
backgroundColor: 'transparent',
},
});
AppRegistry.registerComponent('schwein', () => Schwein);
&#13;
答案 0 :(得分:1)
图像在每个平台上的实现略有不同,所以确实可能会发生这种情况。我想建议在开始时加载这些图像创建组件,然后使用样式定义的不透明度控制其可见性。它应该按预期工作,不会闪烁。