React Native - 为什么我的图片按钮会在Android上闪烁?

时间:2017-02-17 13:27:45

标签: javascript react-native react-native-android

我有一个简单的图像按钮,可以在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;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

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