React Native笔记3——自己做Splash界面

在安卓的学习路径中 , 启动页算是很靠前的一项了 , 可是在做RN的时候却发现, 很多教程都是通过开源框架去做的 , 拜托 , 刚开始就学框架不太好吧?? 所以在这里 , 我们可以使用安卓的思维去做一个RN的Splash界面 , 虽然我不知道这样好不好 , 但至少是可以实现的.

Android的实现方法

Splash界面最开始是为了在初始化App的时候不要有明显的卡顿 , 所以就做了个Splash页面来展示出来 ,同时初始化数据 . 不仅起到了宣传品牌的效果, 而且也明显的加强了用户体验
Android中有很多种方法可以实现 , 这里使用最简单的线程休眠方法.

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(3000);
            startActivity(intent);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}).start();

使用线程休眠来展示页面 , 当然在休眠的同时也可以去做一下初始化 , 3秒之后跳转界面.以此为据, 我们来做RN的Splash

React Native的Splash

  1. 首先我对Navigator进行了抽取,封装成了MyNavigator, 是的传入的rootRoute作为第一界面, 如图所示:
/**
 * 抽取的Navigator 需要传入rootRoute作为第一界面
 */
export default class MyNavigator extends Component{
    render(){
        return(
            <Navigator
                initialRoute={this.props.rootRoute}
                configureScene={(route) => {
                    let configure = Navigator.SceneConfigs.PushFromRight;
                    switch (route.configure) {
                        case Consts.FloatFromLeft:
                            configure = Navigator.SceneConfigs.FloatFromLeft;
                            break;
                        case Consts.FloatFromBottom:
                            configure = Navigator.SceneConfigs.FloatFromBottom;
                            break;
                    }
                    return {
                        ...configure,
                        gestures: {}//禁用滑动退出
                    };
                }}
                renderScene={(route, navigator) => {
                    // 从route对象中获取页面组件
                    var Minuit = route.component;
                    return (<Minuit
                        navigator={navigator} {...route.passProps}/>);
                }}
            ></Navigator>
        )
    }
}
  1. 在Splash界面中定义路由并传入页面信息
 render() {
        var rootRoute = {
            component: SplashPage //传入参数
        };
        return (
            <MyNavigator rootRoute={rootRoute}/>
        );
    }

此时 , 默认的页面即为SplashPage, 这里直接放一张图片就好

render() {
        return (
            <View style={{flex: 1}}>
                <StatusBar hidden={true} translucent={true}/>
                <Image source={require('./modules/img/splash.png')} style={styles.container}>
                </Image>
            </View>
        );
    }

这里一定要注意了 , 如下的属性可以让图片全屏(试了好久)

container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        width: null, //必须为null
        height: null, //必须为null
    },
  1. 接下来就可以去模拟线程休眠了 , 在API中我们可以发现定时器这一控件 , 我们就用他来做: 在界面渲染完成的时候(componentDidMount)开始定时 , 3秒之后跳转到下一界面 ,界面不可见时(componentWillUnmount)清空定时器
    以下为SplashPage的完整代码
class SplashPage extends Component {
    // 界面渲染完成的回调
    componentDidMount() {
        // 开始计时
        this.timer = setTimeout(
            () => {
                 //3秒之后的操作
                var nextRoute = {
                    component: LoginAndRegisterPage,
                };
                this.props.navigator.push(nextRoute); // 页面跳转
            },
            3000
        );
    }

    componentWillUnmount() {
        // 如果存在this.timer,则使用clearTimeout清空。
        // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear
        this.timer && clearTimeout(this.timer);
    }

    render() {
        return (
            <View style={{flex: 1}}>
                <StatusBar hidden={true} translucent={true}/>
                <Image source={require('./modules/img/splash.png')} style={styles.container}>
                </Image>
            </View>
        );
    }
}

至此 , Splash完成, 敲黑板写一下重点吧 , 这些自己了解就好

  1. 图片的全屏()
  2. 界面跳转Navigator
  3. 定时器timer
  4. 生命周期函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容