这篇文章主要介绍“Android Compose页面切换动画怎么实现”,在日常操作中,相信很多人在Android Compose页面切换动画怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android
这篇文章主要介绍“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@Composablefun 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()
替换NavHost
为AnimatedNavHost
替换import androidx.navigation.compose.navigation
为import com.google.accompanist.navigation.animation.navigation
替换import androidx.navigation.compose.composable
为import com.google.accompanist.navigation.animation.composable
那就来吧:
@OptIn(ExperimentalAnimationApi::class, ExperimentalPagerApi::class)@Composablefun 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 ) } }}
下面就来看看如何使用这个库为页面之间切换添加动画吧:
@ExperimentalAnimationApipublic 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页面切换动画怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
--结束END--
本文标题: Android Compose页面切换动画怎么实现
本文链接: https://lsjlt.com/news/301951.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0