RN

react-native ActivityIndicator实现

2018-07-31  本文已影响413人  sybil052

ActivityIndicator组件,显示一个圆形的 loading 提示符号。

基本属性

属性 说明
animating 是否要显示指示器动画,true表示显示,false隐藏
size 指示器的大小,small表示尺寸小,large尺寸大
color 滚轮的前景颜色
hidesWhenStopped 在animating为 false 的时候,是否要隐藏指示器

组件介绍完,下面实现功能:loading框的实现可以结合modal组件,实现一种加载中有遮罩层且不可操作的效果,上代码:

import React, {Component} from 'react';
import {
    StyleSheet,
    View,
    Text,
    ActivityIndicator,
    TouchableOpacity,
    Modal
} from 'react-native';
import {connect} from 'react-redux';

class ActivityIndicatorDemo extends Component {
    constructor(props) {
        super(props);
        this.state = {
            animating: false,
            modalVisible: false
        }
    }
    componentDidMount(){
        this.setState({
            animating: true,
            modalVisible: true
        })
        this._timer = setTimeout(() => {
            this.setState({
                animating: false,
                modalVisible: false
            });
        }, 3000);
    }

    componentWillUnmount(){
        this._timer && clearTimeout(this._timer);
    }

    render() {
        return(
            <View style={styles.container}>
                <Modal 
                    animationType={'fade'}
                    visible={this.state.modalVisible}
                    transparent={true}
                    onRequestClose={() => {
                        // alert("Modal has been closed.");
                    }}
                >
                    <ActivityIndicator 
                        style={styles.loadingStyle}
                        size="large" // 指示器的大小
                        color='#1a94fc' // 滚轮的前景颜色
                        animating={this.state.animating} // 是否要显示指示器动画 true表示显示 false隐藏
                        hidesWhenStopped={true} // 在animating为false的时候,是否要隐藏指示器
                    />
                </Modal>
            </View>
        )
    }

}
const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#FFF',
    },
    loadingStyle:{
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'rgba(0,0,0,0.1)'
    }
});

const mapStateToProps = state => ({
    nav: state.nav,
})

const mapDispatchToProps = (dispatch) => {
    return {
        dispatch
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(ActivityIndicatorDemo)

效果图:

QQ20180731-161904.gif
上一篇下一篇

猜你喜欢

热点阅读