2017-02-17 254 views
0

我有一个简单的图像按钮,它改变了它的图像onTouchStart和onRelease。在iOS上,它可以像预期的那样工作,但是在Android上,当图像改变时,按钮闪烁。 它看起来像是,如果每次我触摸它时都必须再次加载图像。React Native - 为什么我的图像按钮在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);

回答

1

图像实现略有不同每个平台AFAIK所以这的确可能发生的对。我wolud建议用这些图像在开始时加载创建组件,然后使用样式定义的不透明度控制其可见性。它应该像你期望的那样工作,不会闪烁。