您好,登錄后才能下訂單哦!
這篇文章主要介紹“Android Compose頁(yè)面切換動(dòng)畫怎么實(shí)現(xiàn)”,在日常操作中,相信很多人在Android Compose頁(yè)面切換動(dòng)畫怎么實(shí)現(xiàn)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Android Compose頁(yè)面切換動(dòng)畫怎么實(shí)現(xiàn)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
其實(shí) 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 } }
然后就有了上面的代碼進(jìn)行嘗試,其實(shí)寫的時(shí)候也想過(guò)不行,因?yàn)樵?Compose
中動(dòng)畫有自己的一套實(shí)現(xiàn)方式,并不是像之前那樣放在 anim 文件夾下的 xml 文件,但還是抱著試一試的態(tài)度,最后發(fā)現(xiàn)。。。果然不行。。。
于是開(kāi)始一頓亂找,后來(lái)發(fā)現(xiàn)在官方文檔中已經(jīng)寫明了:
注意:
anim
塊不能與 Navigation Compose 一起使用。系統(tǒng)會(huì)在此功能請(qǐng)求中跟蹤 Navigation Compose 中的轉(zhuǎn)換動(dòng)畫。
然后就沒(méi)有然后了,就開(kāi)始等。。。。這一等就是好久。(其實(shí)這篇文章是之前寫的,但一直沒(méi)發(fā))
終于在前段時(shí)間,這個(gè)問(wèn)題有了眉目,Google 并沒(méi)有將這個(gè)功能放到 Navigation
庫(kù)中,而是重新創(chuàng)建了一個(gè)庫(kù):navigation-animation
,使用的時(shí)候同時(shí)引入即可進(jìn)行使用。
首先需要做的肯定是添加依賴:
現(xiàn)在應(yīng)用級(jí)的 build.gradle 中添加:
repositories { mavenCentral() }
然后在 Module 級(jí)的 build.gradle 中添加:
// Navigation 動(dòng)畫 implementation "com.google.accompanist:accompanist-navigation-animation:$accompanist_version"
接下來(lái)需要做的是遷移之前寫的 Navigation
的代碼,先來(lái)看看之前的寫法吧:
@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()
替換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
那就來(lái)吧:
@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 ) } } }
下面就來(lái)看看如何使用這個(gè)庫(kù)為頁(yè)面之間切換添加動(dòng)畫吧:
@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
庫(kù)中的源碼,可以看到除了之前 Navigation
庫(kù)中的一些參數(shù)外還多了幾個(gè)參數(shù)用來(lái)設(shè)置動(dòng)畫,來(lái)具體看看吧:
**enterTransition:**在此 NavGraph 中定義目的地的輸入轉(zhuǎn)換動(dòng)畫
**exitTransition:**在此 NavGraph 中為目的地定義退出轉(zhuǎn)換動(dòng)畫
**popEnterTransition:**在此 NavGraph 中定義目的地的彈出輸入轉(zhuǎn)換動(dòng)畫
**popExitTransition:**在此 NavGraph 中為目的地定義彈出退出轉(zhuǎn)換動(dòng)畫
再來(lái)看看具體使用吧:
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, )
到此,關(guān)于“Android Compose頁(yè)面切換動(dòng)畫怎么實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。