일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 주석
- themes.xml
- BottomNavigationView
- fragment
- 일렉트론
- electron
- room
- Safe Args
- nav_graph
- Gradle
- 스플래시
- 테마
- Datastore
- imageview
- kotlin
- asLiveData()
- Android
- Navigation Component
- 면접
- Jetpack Compose
- Binding Adapter
- Livedata
- recyclerview
- TypeConverter
- 개발자
- 안드로이드
- 취업
- android studio
- ViewModel
- hilt
- Today
- Total
나만 보는 일기장
[Splash Screen] Core SplashScreen API를 이용해 Splash Screen 구현하기 본문
[Splash Screen] Core SplashScreen API를 이용해 Splash Screen 구현하기
Patrick0422 2021. 12. 31. 16:16
스플래시 화면이란, 앱 실행 직후 화면이 로딩되는 동안 노출되는 화면으로, 빈칸이 아닌 앱이나 브랜드의 로고 등을 표시함으로써 UX를 높이는 역할을 합니다. 또, 스플래시 화면에서 앱의 버전 확인, 가벼운 네트워크 작업등이 이루어지기도 합니다.
스플래시 화면은 Cold Start와 Warm Start시에 표시되고, Hot Start시에는 표시되지 않습니다.
Cold Start와 Warm Start, Hot Start에 대한 자세한 내용은 아래 링크를 참조하시길 바랍니다.
지금까지는 액티비티를 따로 만드는 등의 작업을 통해 스플래시 화면을 직접 만들어야 했지만,
Android 12 버전부터는 SplashScreen API를 통해 공식적으로 지원하기 시작했습니다.
SplashScreen API 자체는 SDK 31부터 지원하기 때문에,
2021년 6월 30일에 만들어진 Core SplashScreen API를 통해 SDK 21 이상에서 동일한 기능을 사용할 수 있습니다.
(2021년 12월 31일 기준 Android Studio Project의 minSdk 버전 또한 21)
이제 사용법으로 넘어가겠습니다.
Dependency 설정
dependencies {
...
// Core SplashScreen
implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
}
app단위 Gradle에 추가해줍니다.
Theme 추가
themes.xml에서 Splash Screen에 쓸, Theme.SplashScreen을 parent로 갖는 스타일을 하나 만들어줍니다.
이곳에서 스플래시 화면의 속성들을 지정해 줄 수 있는데, 사용 가능한 속성들은 다음과 같습니다.
windowSplashScreenBackground: 스플래시 화면에 표시될 배경을 설정할 수 있습니다.
windowSplashScreenAnimatedIcon: 스플래시 화면에 표시될 아이콘을 설정할 수 있습니다.
windowSplashScreenAnimationDuration: 스플래시 화면이 표시될 시간을 지정합니다. (최대 1000ms)
postSplashScreenTheme: 스플래시 화면이 종료된 이후 Theme을 설정할 수 있습니다.
<style name="Theme.09P9.SplashScreen" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/blue_09p9</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
<item name="postSplashScreenTheme">@style/Theme.09P9</item>
<item name="windowSplashScreenAnimationDuration">1000</item>
</style>
위와 같이 설정할 수 있습니다.
이외의 추가적인 속성은 다음 링크를 참고하시길 바랍니다.
이후, AndroidManifest.xml에서 application의 theme에 방금 만든 style을 지정해줍니다.
Splash Screen 호출
이제 액티비티 단에서, setContentView를 호출하기 이전에 installSplashScreen() 함수를 호출해줍니다.
java.lang.IllegalStateException:
You need to use a Theme.AppCompat theme (or descendant) with this activity.
그러지 않을 경우 위와 같은 예외가 발생하게 됩니다.
Splash Screen 지연시키기
위의 설명과 같이 스플래시 화면은 아주 짧은 시간 동안만 보이게 됩니다.
// Create a new event for the activity.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Set the layout for the content view.
setContentView(R.layout.main_activity)
// Set up an OnPreDrawListener to the root view.
val content: View = findViewById(android.R.id.content)
content.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
// Check if the initial data is ready.
return if (viewModel.isReady) {
// The content is ready; start drawing.
content.viewTreeObserver.removeOnPreDrawListener(this)
true
} else {
// The content is not ready; suspend.
false
}
}
}
)
}
스플래시 화면을 좀 더 오래 표시하기 위해서 OnPreDrawListener를 통해 스플래시 화면에서 지연시킬 수 있습니다.
위 코드에서는 viewModel의 isReady가 true가 될 때까지 스플래시 화면을 표시합니다.
이를 응용해 간단한 내부 작업을 스플래시 화면이 표시되는 동안 처리할 수 있습니다.
Splash Screen 애니메이션 넣기
splashScreen.setOnExitAnimationListener { splashScreenView ->
val slideUp = ObjectAnimator.ofFloat(
splashScreenView,
View.TRANSLATION_Y,
0f,
-splashScreenView.height.toFloat()
)
slideUp.interpolator = AnticipateInterpolator()
slideUp.duration = 200L
// Call SplashScreenView.remove at the end of your custom animation.
slideUp.doOnEnd { splashScreenView.remove() }
// Run your animation.
slideUp.start()
}
위와 같이 splashScreen에 .setOnExitAnimationListener를 등록해 스플래시 화면이 끝날 때의 애니메이션을 추가할 수 있습니다.
참고:
'개발 > Android' 카테고리의 다른 글
안드로이드 최신 API의 AVD 생성하기 (0) | 2022.01.03 |
---|---|
[Android Studio] 레이아웃 미리보기에 적용된 테마 변경하기 (0) | 2022.01.03 |
[Android] 5초만에 SHA-1 Key 얻는법 (0) | 2021.12.31 |
[Android Studio] TODO , FIXME 같은 색깔있는 주석 표시하기 (0) | 2021.12.13 |