react-navigation自定义StackNavigator页面跳转动画

2018.02.09更新:
react-navigation内置跳转动画的路径发生了改变,由
react-navigation/src/views/CardStackStyleInterpolator 改为
react-navigation/src/views/CardStack/CardStackStyleInterpolator

---------------------------------------------- 分割线 ----------------------------------------------

使用StackNavigator跳转页面时,react-navigation根据平台的不同内置了相应的跳转动画。
内置的跳转动画在react-navigation/src/views/CardStack/CardStackStyleInterpolator中,共三种。forHorizontal:从右向左进入、forVertical:从下向上进入、forFadeFromBottomAndroid:从底部淡出。
关于修改默认的跳转动画或者自定义动画效果,以下给出两个场景。

修改整个栈内的页面跳转动画

这种场景是,一个栈内所有页面的跳转使用相同的动画效果,示例代码如下:

import CardStackStyleInterpolator from 'react-navigation/src/views/CardStack/CardStackStyleInterpolator';
const CustomerNavigator = StackNavigator({
  ScreenKey: { screen: MyScreen },
  // other screens
}, {
  transitionConfig: () => {
    screenInterpolator: CardStackStyleInterpolator.forVertical,
    transitionSpec: {
      duration: 250,
      easing: Easing.bounce,
      timing: Animated.timing,
    },
  },
});

在安卓上运行时,默认的跳转动画效果是forFadeFromBottomAndroid,经过上述配置,CustomerNavigator 内的页面切换时,会使用forVertical效果。
transitionSpec内可以配置与动画相关的属性。

通过传递参数决定某页面的跳转动画

在一个StackNavigator内,可能某些页面需要用forHorizontal的跳转方式,另一些需要用forVertical的跳转方式,以下是解决方案。

import CardStackStyleInterpolator from 'react-navigation/src/views/CardStack/CardStackStyleInterpolator';
const TransitionConfiguration = () => ({
  screenInterpolator: (sceneProps) => {
    const { scene } = sceneProps;
    const { route } = scene;
    const params = route.params || {};
    const transition = params.transition || 'forHorizontal';
    return CardStackStyleInterpolator[transition](sceneProps);
  },
});

const CustomerNavigator = StackNavigator({
  ScreenKey: { screen: MyScreen },
  // other screens
}, {
  transitionConfig: TransitionConfiguration,
});

假如希望CustomerNavigator内的某个页面使用forVertical的跳转动画效果,调用this.props.navigate('SomeScreenKey', { transition: 'forVertical' });切换页面即可。

总结

本文均使用react-navigation自带的跳转动画,因为这三种跳转方式可以满足很多需求,希望将来能内置更丰富的效果。
react-navigation支持自定义的跳转动画效果,获取sceneProps中的layout,position,scene属性,以及scene中的index属性,就能完成自定义动画的开发。具体可以参考这篇文章的内容。如果想对其动画原理有更深的了解,可以学习这篇文章

参考资料

  1. React Native Navigation, custom Scene (Screen) Transitions and interpolations
  2. issue#1187--Add support for custom transitionConfig

博文发布在个人博客,欢迎访问!!

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,434评论 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 23,691评论 8 183
  • 文/阿飞 你从哪找来? 这杯毒酒 邀我共饮,在花前月后 我明知有毒 毫不迟犹 与你共饮,在花前月后 你为何伤悲? ...
    阿飞先生阅读 145评论 0 1
  • 死亡,这个词对于二十几岁正值青春年华的人来说,似乎太过遥远、陌生!不知为什么最近突然经常会想到这个词,每天每时每...
    我的英雄梦想阅读 197评论 0 1
  • 俗话说宰相肚里能撑船,大肚能容天下难容之事。说的就是做人要有有度量,心胸要宽广。 山不言自高,水不言自深。凡事不必...
    幻曲风阅读 416评论 0 0