温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android Compose页面切换动画怎么实现

发布时间:2021-12-15 13:33:36 来源:亿速云 阅读:612 作者:iii 栏目:开发技术

这篇文章主要介绍“Android Compose页面切换动画怎么实现”,在日常操作中,相信很多人在Android Compose页面切换动画怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android Compose页面切换动画怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

开始尝试

其实 Compose 中的 Navigation 就是之前 Jetpack 中的 Navigation 改的,所以之前的 api 还是存在的,

然后用上试试呗!

navController.navigate(route) {     anim {         enter = R.anim.in_from_right         exit = R.anim.out_to_left         popEnter = R.anim.in_from_right         popExit = R.anim.out_to_left     } }

然后就有了上面的代码进行尝试,其实写的时候也想过不行,因为在 Compose 中动画有自己的一套实现方式,并不是像之前那样放在 anim 文件夹下的 xml 文件,但还是抱着试一试的态度,最后发现。。。果然不行。。。

于是开始一顿乱找,后来发现在官方文档中已经写明了:

注意anim 块不能与 Navigation Compose 一起使用。系统会在此功能请求中跟踪 Navigation Compose 中的转换动画。

然后就没有然后了,就开始等。。。。这一等就是好久。(其实这篇文章是之前写的,但一直没发)

终于在前段时间,这个问题有了眉目,Google 并没有将这个功能放到 Navigation 库中,而是重新创建了一个库:navigation-animation,使用的时候同时引入即可进行使用。

开始撸码

首先需要做的肯定是添加依赖:

现在应用级的 build.gradle 中添加:

repositories {     mavenCentral() }

然后在 Module 级的 build.gradle 中添加:

// Navigation 动画 implementation "com.google.accompanist:accompanist-navigation-animation:$accompanist_version"

接下来需要做的是迁移之前写的 Navigation 的代码,先来看看之前的写法吧:

@ExperimentalPagingApi @Composable fun NavGraph(     startDestination: String = MainDestinations.HOME_PAGE_ROUTE ) {     val navController = rememberNavController()     val actions = remember(navController) { MainActions(navController) }     NavHost(         navController = navController,         startDestination = startDestination     ) {         composable(MainDestinations.HOME_PAGE_ROUTE) {             Home(actions)         }     } }

需要做的迁移有:

替换rememberNavController()rememberAnimatedNavController()

替换NavHostAnimatedNavHost

替换import androidx.navigation.compose.navigationimport com.google.accompanist.navigation.animation.navigation

替换import androidx.navigation.compose.composableimport com.google.accompanist.navigation.animation.composable

那就来吧:

@OptIn(ExperimentalAnimationApi::class, ExperimentalPagerApi::class) @Composable fun NavGraph(     startDestination: String = PlayDestinations.HOME_PAGE_ROUTE, ) {     val navController = rememberAnimatedNavController()     val actions = remember(navController) { PlayActions(navController) }     AnimatedNavHost(         navController = navController,         startDestination = startDestination     ) {         setComposable(PlayDestinations.HOME_PAGE_ROUTE) {             WeatherViewPager(                 toCityList = actions.toCityList,                 toWeatherList = actions.toWeatherList             )         }     } }

下面就来看看如何使用这个库为页面之间切换添加动画吧:

@ExperimentalAnimationApi public fun NavGraphBuilder.navigation(     startDestination: String,     route: String,     enterTransition: (AnimatedContentScope<NavBackStackEntry>.() -> EnterTransition?)? = null,     exitTransition: (AnimatedContentScope<NavBackStackEntry>.() -> ExitTransition?)? = null,     popEnterTransition: (         AnimatedContentScope<NavBackStackEntry>.() -> EnterTransition?     )? = enterTransition,     popExitTransition: (         AnimatedContentScope<NavBackStackEntry>.() -> ExitTransition?     )? = exitTransition,     builder: NavGraphBuilder.() -> Unit )

上面这段代码是 navigation-animation 库中的源码,可以看到除了之前 Navigation 库中的一些参数外还多了几个参数用来设置动画,来具体看看吧:

**enterTransition:**在此 NavGraph 中定义目的地的输入转换动画

**exitTransition:**在此 NavGraph 中为目的地定义退出转换动画

**popEnterTransition:**在此 NavGraph 中定义目的地的弹出输入转换动画

**popExitTransition:**在此 NavGraph 中为目的地定义弹出退出转换动画

再来看看具体使用吧:

composable(     route = route,     arguments = arguments,     deepLinks = deepLinks,     enterTransition = {         expandVertically(animationSpec = tween(300))     },     exitTransition = {         shrinkOut(animationSpec = tween(300))     },     popEnterTransition = {         expandVertically(animationSpec = tween(300))     },     popExitTransition = {         shrinkOut(animationSpec = tween(300))     },     content = content, )

到此,关于“Android Compose页面切换动画怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI