Android12부터 Android SDK에서 제공하는 API를 통해 윈도우 블러를 손쉽게 구현할 수 있다.

이 API를 이용하면 윈도우를 불투명하게 만들수도 있고, 윈도우 뒤에 있는 배경만 흐리게 만들수도 있다. 그리고 두 효과를 결합할 수도 있다.

윈도우 블러 적용 방법

  1. 윈도우를 투명하게 만들기 위해 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의 한계로 일부기기에서는 동작하지 않을 수 있다. 또한 런타임에도 베터리 절약모드 등과 같은 상황에서 윈도우 블러가 비활성화 될 수 있다.

그러므로 다음과 같은 메서드를 통해 윈도우 블러가 활성화 되었는지 확인하자.

기타 자세한 내용은 공식문서를 통해 확인할 수 있다.

예제코드

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에서 확인 할 수 있다.

카테고리: Tutorial

2개의 댓글

로너 · 2022년 7월 18일 9:37 오전

잘 읽었습니다..!!

    Charlezz · 2022년 7월 18일 9:20 오후

    부족한 글 읽어주셔서 감사합니다 🙂

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.