我正在使用这个库https://reactnavigation.org/docs/intro/通过 react-native 构建 android。我可以在 android 设备上进行导航,但是如何让屏幕从右侧滑入并从左侧淡入。似乎这种行为发生在 iOS 设备上,而不是在 Android 上。android应用程序是否有任何动画配置?
请看下面的动画。这是在 iOS 中记录的。
我正在使用这个库https://reactnavigation.org/docs/intro/通过 react-native 构建 android。我可以在 android 设备上进行导航,但是如何让屏幕从右侧滑入并从左侧淡入。似乎这种行为发生在 iOS 设备上,而不是在 Android 上。android应用程序是否有任何动画配置?
请看下面的动画。这是在 iOS 中记录的。
从:“@react-navigation/native”开始:“^5.5.1”,
import {createStackNavigator, TransitionPresets} from '@react-navigation/stack';
const TransitionScreenOptions = {
...TransitionPresets.SlideFromRightIOS, // This is where the transition happens
};
const CreditStack = createStackNavigator();
function CreditStackScreen() {
return (
<CreditStack.Navigator screenOptions={TransitionScreenOptions}> // Don't forget the screen options
<CreditStack.Screen
name="Credit"
component={HomeScreen}
options={headerWithLogo}
/>
<HomeStack.Screen
name="WorkerDetails"
component={WorkerDetails}
options={headerWithLogoAndBackBtn}
/>
</CreditStack.Navigator>
);
}
您可以观看此视频以了解更多信息: https ://www.youtube.com/watch?v=PvjV96CNPqM&ab_channel=UnsureProgrammer
您应该使用覆盖此页面上transitionConfig
所写的默认屏幕转换。
不幸的是,没有提供该函数如何工作的示例,但您可以在此文件中找到一些示例:\react-navigation\lib\views\CardStackStyleInterpolator.js
所以你的代码应该是这样的:
const navigator = StackNavigator(scenes, {
transitionConfig: () => ({
screenInterpolator: sceneProps => {
const { layout, position, scene } = sceneProps;
const { index } = scene;
const translateX = position.interpolate({
inputRange: [index - 1, index, index + 1],
outputRange: [layout.initWidth, 0, 0]
});
const opacity = position.interpolate({
inputRange: [
index - 1,
index - 0.99,
index,
index + 0.99,
index + 1
],
outputRange: [0, 1, 1, 0.3, 0]
});
return { opacity, transform: [{ translateX }] };
}
})
});
您需要从“react-navigation-stack”导入 StackViewTransitionConfigs,然后覆盖 transitionConfing 函数。
const myStack = createStackNavigator({
Screen1,
Screen2,
Screen3
},{
transitionConfig: () => StackViewTransitionConfigs.SlideFromRightIOS
}
对于 StackNavigatoin 6.xx
只需导入
import { TransitionPresets } from '@react-navigation/stack';
然后创建一个配置:
const screenOptionStyle = {
// headerShown: false,
...TransitionPresets.SlideFromRightIOS,
};
最后将它们分配给 Stack Navigator 屏幕选项:
<Stack.Navigator
screenOptions={screenOptionStyle}
>
<Stack.Screen
...
...
在@react-navigation/stack 组件版本上,从右侧动画中进行滑动的方法是:
<Stack.Navigator
screenOptions={{
cardStyleInterpolator: ({index, current, next, layouts: {screen}}) => {
const translateX = current.progress.interpolate({
inputRange: [index - 1, index, index + 1],
outputRange: [screen.width, 0, 0],
});
const opacity = next?.progress.interpolate({
inputRange: [0, 1, 2],
outputRange: [1, 0, 0],
});
return {cardStyle: {opacity, transform: [{translateX}]}};
},
}}>
<Stack.Screen name="MainScreen" component={MainScreen} />
...
</Stack.Navigator>
您可以从文件中获取有用的信息index.d.ts
,找到export interface TransitionConfig
,然后按 'Ctrl' & left_clickNavigationTransitionSpec
和NavigationSceneRendererProps
,然后您可以获得所需的一切。
更好的是,您可以为此使用 react 本机导航。您可以使用configureScene方法配置屏幕。在该方法中,使用Navigator.SceneConfigs为屏幕设置动画。它适用于 android 和 iOS。