It's just a realtime blurring overlay like iOS UIVisualEffectView.
Just put the view in the layout xml, no Java code is required.
// Views to be blurred
<ImageView ../>
<com.github.mmin18.widget.RealtimeBlurView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:realtimeBlurRadius="20dp"
app:realtimeOverlayColor="#8000" />
// Views above blurring overlay
<Button ../>
Try the sample apk: blurring.apk
Add dependencies in your build.gradle
:
dependencies {
implementation 'com.github.mmin18:realtimeblurview:1.2.1'
}
The following step is only required if your minSdkVersion < 19, or you use renderscript support mode.
Both AndroidX and Android Support Library is supported.
android {
buildToolsVersion '24.0.2' // Use 23.0.3 or higher
defaultConfig {
minSdkVersion 15
renderscriptTargetApi 19
renderscriptSupportModeEnabled true // Enable RS support
}
}
Add proguard rules if necessary:
-keep class android.support.v8.renderscript.** { *; }
-keep class androidx.renderscript.** { *; }
-
Adding multiple RealtimeBlurView (even not visible) may hurt drawing performance, like use it in ListView or RecyclerView.
-
It will not work with SurfaceView / TextureView like VideoView, GoogleMapView
RealtimeBlurView use RenderScript to blur the bitmap, just like 500px-android-blur.
Everytime your window draw, it will render a blurred bitmap, so there is a performance cost. Set downsampleFactor>=4 will significantly reduce the render cost. However, if you just want to blur a static view, 500px-android-blur is good enough.
I've run the sample on some old phones like Samsung Galaxy S2, Samsung Galaxy S3, it runs at full FPS. Here is a performance chart while scrolling the list on Nexus 5.
Improve BlurImpl detection.
Support both AndroidX and Android Support Library.
Bug fix (Draw overlay color in rect).
Fix downsample factor issue when blur radius is very big.
Some improvements (OOM, resize, window background)
Fix view not refreshed issue on PopupWindow
Fix crash when view is very small (draw at least 1px)
Support Popup Window (Use it as dialog background) Ignore UnsatisfiedLinkError if APK is not debuggable.
Support custom shape (by override drawBlurredBitmap()), support view in ContextThemeWrapper.