Android12부터 Android SDK에서 제공하는 API를 통해 윈도우 블러를 손쉽게 구현할 수 있다.
이 API를 이용하면 윈도우를 불투명하게 만들수도 있고, 윈도우 뒤에 있는 배경만 흐리게 만들수도 있다. 그리고 두 효과를 결합할 수도 있다.
윈도우 블러 적용 방법
- 윈도우를 투명하게 만들기 위해 windowIsTranslucent를 true로, windowBackground를 투명으로 설정한다.
<!--res/values/themes.xml-->
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Translucent" parent="Theme.AppCompat.DayNight.NoActionBar">
...
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>
2. 윈도우 뒤의 화면을 흐리게 하기 위해 setBlurBehindRadius 메서드를 호출한다. radius값이 0이면 블러가 적용되지 않으며, 값이 크면 클수록 화면이 더욱 흐려진다. 이 메서드를 호출하기 전에 FLAG_BLUR_BEHIND가 설정되어있는지 확인하자.
3. 윈도우 경계내에서 블러 효과를 적용하기 위해 setBackgroundBlurRadius를 호출한다. radius값이 0이면 블러가 적용되지 않으며, 값이 크면 클수록 화면이 더욱 흐려진다.
제약사항
이 API는 Android12 이상 기기에서만 사용할 수 있다고 했으나, 모든 Android12 이상 기기에서 항상 동작하는 것은 아니다. GPU의 한계로 일부기기에서는 동작하지 않을 수 있다. 또한 런타임에도 베터리 절약모드 등과 같은 상황에서 윈도우 블러가 비활성화 될 수 있다.
그러므로 다음과 같은 메서드를 통해 윈도우 블러가 활성화 되었는지 확인하자.
- isCrossWindowBlurEnabled : 윈도우 블러가 활성화 되어있다면 true를 반환
- addCrossWindowBlurEnabledListener : 런타임에 윈도우 블러가 변경되는 시점을 알 수 있는 리스너
기타 자세한 내용은 공식문서를 통해 확인할 수 있다.
예제코드
private fun setBlurredBackground() {
if (windowManager.isCrossWindowBlurEnabled) {
window.setFlags(
WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND
)
window.attributes.blurBehindRadius = 50
window.setBackgroundBlurRadius(50)
}
}
윈도우 블러 효과가 적용된 Activity 및 Dialog가 포함된 예제는 Github에서 확인 할 수 있다.
2개의 댓글
로너 · 2022년 7월 18일 9:37 오전
잘 읽었습니다..!!
Charlezz · 2022년 7월 18일 9:20 오후
부족한 글 읽어주셔서 감사합니다 🙂