Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Bitrise
- DB 기능
- navigation component
- LazyColumn
- capitalize
- 데이터베이스
- Myungpyo Shim
- kotlin
- 브론즈1
- 데이터베이스 첫걸음
- keystore
- 실버 4
- suspend programming
- compose
- 성빈랜드
- LazyRow
- DB
- 개발하는 정대리
- .github
- 백준
- 실버2
- 2레벨
- github action
- gradlew
- Android
- 피보나치 수 2
- 최댓값 최솟값
- 브론즈 1
- Activirty
- 프로그래머스
Archives
- Today
- Total
plzy의 개발 블로그
[Compose] compose로 splash 만들기 본문
Compose를 사용하기 전에는 Splash Theme를 사용하거나, startActivity 등 사용해서 만들면 됐었다.
하지만 Compose에서는 조금 방법이 다르다.
바로 Navigation을 사용해야한다.
먼저 splash로 사용할 화면과, splash 후에 나올 화면을 NavHost에 정의해 준다.
startDestination 에서 어느 화면이 가장 먼저 실행될 것인지 명시해준다.
@Composable
fun BosoDiaryApp() {
// navigation 설정
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.Splash.route
) {
composable(route = Screen.Splash.route) {
AnimationSplashScreen(navController)
}
composable(route = Screen.Login.route) {
LoginScreen(navController)
}
}
}
이 함수는 MainActivity에서 사용한다.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SecretDiaryTheme {
BosoDiaryApp()
}
}
}
}
SplashScreen에서 LaunchedEffect안에서 navigate로 화면을 이동하는것을 볼 수 있다.
LaunchedEffect는 side-Effect로 비동기로 처리된다.
기존의 Runnable, Corutine으로 splash화면을 구현했던것처럼 비동기로 구현하는 거다.
@Composable
fun SplashScreenContent() {
val density = LocalDensity.current
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
AnimatedVisibility(
visible = true,
enter = slideInVertically {
// Slide in from 40 dp from the top.
with(density) { 40.dp.roundToPx() }
} + expandVertically(
// Expand from the top.
expandFrom = Alignment.Top
) + fadeIn(
// Fade in with the initial alpha of 0.3f.
initialAlpha = 0.3f
),
exit = slideOutVertically() + shrinkVertically() + fadeOut()
) {
AppTitle()
}
}
}
@Composable
fun AnimationSplashScreen(navController: NavHostController) {
LaunchedEffect(key1 = true) {
delay(3000)
navController.popBackStack()
navController.navigate(Screen.Login.route)
}
SplashScreenContent()
}
navigate안에는 어디로 화면이 이동할지 String 값으로 명시를 해줘야하기 때문에 sealed class를 이용해서 사용한다.
sealed class Screen(val route : String){
object Splash : Screen("splash_screen")
object Login : Screen("login_screen")
}
결과
'Android' 카테고리의 다른 글
[Coroutine] 기초를 알아보자. (1) (0) | 2022.07.07 |
---|---|
[Coroutine] suspend 를 왜 붙이는 걸까? (1) | 2022.06.30 |
LiveData 대신 Flow가 나온 이유? (0) | 2022.06.22 |
[Android] 코루틴이란 무엇인가. (0) | 2022.05.17 |
[Compose] compose에서 RecyclerView를 쓰는법 (0) | 2022.05.16 |