diff --git a/example/App.js b/example/App.js
index 0e6e64b..8683f8b 100644
--- a/example/App.js
+++ b/example/App.js
@@ -6,6 +6,7 @@ import { createStackNavigator } from 'react-navigation-stack';
import { ListSection, Divider } from 'react-native-paper';
import SimpleStack from './src/SimpleStack';
+import TransparentStack from './src/TransparentStack';
// Comment the following two lines to stop using react-native-screens
import { useScreens } from 'react-native-screens';
@@ -13,6 +14,11 @@ useScreens();
const data = [
{ component: SimpleStack, title: 'Simple', routeName: 'SimpleStack' },
+ {
+ component: TransparentStack,
+ title: 'Transparent',
+ routeName: 'TransparentStack',
+ },
];
class Home extends React.Component {
diff --git a/example/src/TransparentStack.js b/example/src/TransparentStack.js
new file mode 100644
index 0000000..b2c6b6f
--- /dev/null
+++ b/example/src/TransparentStack.js
@@ -0,0 +1,100 @@
+import React from 'react';
+import { Animated, Button, Easing, View, Text } from 'react-native';
+import { createStackNavigator } from 'react-navigation-stack';
+
+class ListScreen extends React.Component {
+ render() {
+ return (
+
+ List Screen
+ A list may go here
+
+ );
+ }
+}
+
+class ModalDialogScreen extends React.Component {
+ render() {
+ return (
+
+
+ Dialog
+ this.props.navigation.goBack()}
+ />
+
+
+ );
+ }
+}
+
+export default createStackNavigator(
+ {
+ List: ListScreen,
+ ModalDialog: ModalDialogScreen,
+ },
+ {
+ initialRouteName: 'List',
+ transparentCard: true,
+ mode: 'modal',
+ headerMode: 'none',
+ navigationOptions: {
+ gesturesEnabled: false,
+ },
+ transitionConfig: () => ({
+ transitionSpec: {
+ duration: 300,
+ easing: Easing.inOut(Easing.ease),
+ timing: Animated.timing,
+ },
+ screenInterpolator: sceneProps => {
+ const { position, scene } = sceneProps;
+ const { index } = scene;
+
+ const opacity = position.interpolate({
+ inputRange: [index - 1, index],
+ outputRange: [0, 1],
+ });
+
+ return { opacity };
+ },
+ }),
+ }
+);
diff --git a/package.json b/package.json
index cd098cb..a7ced87 100644
--- a/package.json
+++ b/package.json
@@ -75,5 +75,9 @@
"transformIgnorePatterns": [
"node_modules/(?!(jest-)?react-native|react-clone-referenced-element|react-navigation-deprecated-tab-navigator|react-navigation)"
]
+ },
+ "prettier": {
+ "trailingComma": "es5",
+ "singleQuote": true
}
}
diff --git a/src/views/StackView/StackViewCard.js b/src/views/StackView/StackViewCard.js
index f330004..743bef2 100644
--- a/src/views/StackView/StackViewCard.js
+++ b/src/views/StackView/StackViewCard.js
@@ -29,22 +29,24 @@ class Card extends React.Component {
pointerEvents,
style,
position,
+ transparent,
scene: { index, isActive },
} = this.props;
- const active = isActive
- ? 1
- : position.interpolate({
- inputRange: [index, index + 1 - EPS, index + 1],
- outputRange: [1, 1, 0],
- extrapolate: 'clamp',
- });
+ const active =
+ transparent || isActive
+ ? 1
+ : position.interpolate({
+ inputRange: [index, index + 1 - EPS, index + 1],
+ outputRange: [1, 1, 0],
+ extrapolate: 'clamp',
+ });
return (
@@ -63,6 +65,10 @@ const styles = StyleSheet.create({
shadowOpacity: 0.2,
shadowRadius: 5,
},
+ transparent: {
+ ...StyleSheet.absoluteFillObject,
+ backgroundColor: 'transparent',
+ },
});
export default createPointerEventsContainer(Card);
diff --git a/src/views/StackView/StackViewLayout.js b/src/views/StackView/StackViewLayout.js
index a8e6824..6838d4a 100644
--- a/src/views/StackView/StackViewLayout.js
+++ b/src/views/StackView/StackViewLayout.js
@@ -618,6 +618,7 @@ class StackViewLayout extends React.Component {