From 6d110d64356309ebac4d64e22d5b1f16b98c36bb Mon Sep 17 00:00:00 2001 From: jiong-shen-cb <70784786+jiong-shen-cb@users.noreply.github.com> Date: Mon, 23 Nov 2020 06:04:12 -0800 Subject: [PATCH] feat: add slide animations on Android (#648) Added `slide_from_left` and `slide_from_right` to the list of available transition animations on Android. They are mapped to default transition on iOS. Also, the ordering of the screens adding/removing in `ScreenStack.java` was changed because the custom animations need to be set first before any screens are added/removed. --- README.md | 2 + TestsExample/src/Test648.js | 46 +++++++++++ .../java/com/swmansion/rnscreens/Screen.java | 4 +- .../com/swmansion/rnscreens/ScreenStack.java | 81 ++++++++++++------- .../rnscreens/ScreenViewManager.java | 4 + .../main/res/anim/rns_slide_in_from_left.xml | 5 ++ .../main/res/anim/rns_slide_in_from_right.xml | 5 ++ .../main/res/anim/rns_slide_out_to_left.xml | 5 ++ .../main/res/anim/rns_slide_out_to_right.xml | 5 ++ createNativeStackNavigator/README.md | 2 + ios/RNSScreen.m | 2 + native-stack/README.md | 2 + src/index.d.ts | 10 ++- src/native-stack/types.tsx | 2 + 14 files changed, 145 insertions(+), 30 deletions(-) create mode 100644 TestsExample/src/Test648.js create mode 100644 android/src/main/res/anim/rns_slide_in_from_left.xml create mode 100644 android/src/main/res/anim/rns_slide_in_from_right.xml create mode 100644 android/src/main/res/anim/rns_slide_out_to_left.xml create mode 100644 android/src/main/res/anim/rns_slide_out_to_right.xml diff --git a/README.md b/README.md index f57e7db5a..43172103e 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,8 @@ Allows for the customization of how the given screen should appear/disappear whe - `"default"` – uses a platform default animation - `"fade"` – fades screen in or out - `"flip"` – flips the screen, requires `stackPresentation: "modal"` (iOS only) +- `"slide_from_right"` - slide in the new screen from right to left (Android only, resolves to default transition on iOS) +- `"slide_from_left"` - slide in the new screen from left to right (Android only, resolves to default transition on iOS) - `"none"` – the screen appears/disappears without an animation #### `stackPresentation` diff --git a/TestsExample/src/Test648.js b/TestsExample/src/Test648.js new file mode 100644 index 000000000..c8def6500 --- /dev/null +++ b/TestsExample/src/Test648.js @@ -0,0 +1,46 @@ +import * as React from 'react'; +import { Button, ScrollView } from 'react-native'; +import { NavigationContainer } from '@react-navigation/native'; +import { createNativeStackNavigator } from 'react-native-screens/native-stack'; + +const AppStack = createNativeStackNavigator(); + +export default function App() { + return ( + + + + + + + ); +} + +function First({navigation}) { + return ( + +