EtsyBlur is an Android library that allows developers to easily add a glass-like blur effect implemented in the Etsy app.

Overview

EtsyBlur

Maven Central Android Arsenal

EtsyBlur is an Android library that allows developers to easily add a glass-like blur effect implemented in the past Etsy app.

Sample App's Launch Screen

Quick Demo

Try out the sample application:

Android app on Google Play

Requirements

API Level 11 (Honeycomb) and above.

Setup

The library is pushed to Maven Central as an AAR, so you just need to add the followings to your build.gradle file:

dependencies {
    compile 'com.ms-square:etsyblur:0.2.1'
}

android {
    defaultConfig {
        renderscriptTargetApi 25
        renderscriptSupportModeEnabled true
    }
}

Usage

Using the library is really simple, read the following instructions or your can also look at the source code of the provided sample.

For NavigationView

// ex...Inside Activity's onCreate()
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
BlurSupport.addTo(drawerLayout);

The above code just works if you have the com.ms_square.etsyblur.BlurringView with id set to @id/blurring_view within your layout xml file. Please place it between the first child view of your DrawerLayout and NavigationView; otherwise, it will not work as expected.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimary"/>

        <!-- main content view -->
        <FrameLayout
            android:id="@+id/content_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <!-- needed w/this id for EtsyBlur Lib to work -->
    <com.ms_square.etsyblur.BlurringView
        android:id="@id/blurring_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.ms_square.etsyblur.BlurringView>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/bg_drawer"
        app:itemTextColor="@android:color/white"
        app:menu="@menu/navigation_view_drawer" />

</android.support.v4.widget.DrawerLayout>

For NavigationDrawer

// ex...Inside Activity's onCreate()
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationDrawerFragment.setUp(R.id.navigation_drawer, drawerLayout);
BlurSupport.addTo(drawerLayout);

The above code just works if you have the com.ms_square.etsyblur.BlurringView with id set to @id/blurring_view within your layout xml file. Please place it between the first child view of your DrawerLayout and NavigationDrawerFragment; otherwise, it will not work as expected.

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NavigationDrawerActivity">

    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout
        android:id="@+id/content_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- needed w/this id for EtsyBlur Lib to work -->
    <com.ms_square.etsyblur.BlurringView
        android:id="@id/blurring_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.ms_square.etsyblur.BlurringView>

    <fragment android:id="@+id/navigation_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:name="com.ms.square.android.etsyblurdemo.NavigationDrawerFragment"
        tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>

For DialogFragment

  • BlurDialogFragment

This is an abstract class to make the dialog background into the blurred image of its holding activity's content. BlurDialogFragment supports asynchronous blur operation provided via Blur - for Simple Blur Effect on bitmaps. Its asynchronous execution policy is determined by the given AsyncPolicy.

Simple usage using inheritance

If you are using android.support.v4.app.DialogFragment, just extend BlurDialogFragment. Using BlurConfig, experiment with the blur radius, the down scale factor, and the overlay coloring to obtain the blur effect you want for your app.

/**
 * Simple dialog fragment with background blurring effect.
 */
public class CreateDialogDialogFragment extends BlurDialogFragment {
@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.EtsyBlurAlertDialogTheme)
                .setIcon(R.drawable.ic_launcher)
                .setTitle("Hello")
                .setPositiveButton("OK", null)
                .create();
        return dialog;
    }
    
    @NonNull
    protected BlurConfig blurConfig() {
        return new BlurConfig.Builder()
                .asyncPolicy(SmartAsyncPolicyHolder.INSTANCE.smartAsyncPolicy())
                .debug(true)
                .build();
    }
}

Note:

In your DialogFragment, override either onCreateDialog() or onCreateView(), not both. For a onCreateView() example, please look at the CreateViewDialogFragment in provided sample. I quickly wrote this minimum BlurDialogFragment just to mimic old-Etsy app's blurring dialog implementation. So, there are missing options/features I should probably add in the future such as a toolbar/actionbar exclusion option, non-support library's DialogFragment support...etc.

BlurringView

BlurringView can blur the target view's content automatically. In this library, it's being used to automatically blur the content within DrawerLayout.

Available custom attributes in layout xml

  • radius - [integer]

Radius used to blur the target view.

  • downScaleFactor - [integer]

Factor used to down scale the target view before blurring. Making this value higher results in faster blurring time and less memory allocation, but degreades final rendering quality.

  • overlayColor - [color]

Color used to overrlay the blurred image

  • allowFallback - [boolean]

If true, it fall backs to Java's fastblur implementation when rederscript is not available. If false, performs no blurring in such case.

  • debug - [boolean]

When set to true, it will output logcat debug messages of blur operations such as blur method used, if executing in background, and time each blur operation took.

BlurConfig

You can also set the configuration dynamically by calling void blurConfig(BlurConfig config) method of BlurringView at runtime. Please not that it must be called before BlurringView's onAttachedToWindow() gets called. When called, it will overwrite the configuration pased through custom attributes in your layout xml file. All the custom attribute options plus the following parameter is currently available.

Policy used to determine whether to execute blurring operation in background thread or not.

NOTE:

BlurringView is based on the implementation of 500px Android Blurring View. Compared with its original implementation, there are several changes such as the followings.

  • If renderscript is not available, it can optionally fallback to the Java's fastblur implementation.
  • No need to call invalidate manually on the target blurredView.
  • The number of bitmaps used is reduced to 1.
  • Does not crash if the target blurredView is set to the BlurringView's parent.
  • Support for the layout preview UI via the isInEditMode() method
  • Support to work with ViewPager

BlurringView currently does not support asynchronous execution of a blur operation. For now, just adjust downSampleFactor and blurRadius to get fast enough performance to just run it on the UI thread. I will ponder if the need for asynchronous suppport justifies added code complexity mainly due to threading.

Blur - for Simple Blur Effect on bitmaps

Blur class is being used internally for both BlurringView and BlurDialogFragment to provide the blur operation as well.

Simple Usage

Blur blur = new Blur(context, blurConfig)

// Run synchronously
// true if inBitmap is reusable as the output
Bitmap blurredBitmap = blur.execute(inBitmap, true);

// Run synchronously or asynchronously depending on the given AsyncPolicy
// via blurConfig.
blur.execute(inBitmap, true, new BlurEngine.Callback() {
    @Override
    public void onFinished(@Nullable Bitmap blurredBitmap) {
    	blurImgView.setImageBitmap(blurredBitmap);
    }
});

// when done, make sure to call destroy() which will clean up used resources and 
// cancel any remaining backgroud work
blur.destroy();

AsyncPolicy

This IF defines policy used to determine whether to execute blurring operation in background thread or not. Currently, the follwing policies are provided.

  • SimpleAsyncPolicy (Default)

If renderscript is available to use, always execute blur operation synchronously; otherwis execute asynchronously.

  • AlwaysAsyncPolicy

Always execute blur operation asynchronously.

  • SmartAsyncPolicy

Dynamically guess computation time required and determins to execute blur operation asynchronously or not. If the estimated computation time exceeds 16ms, it will run asynchronously.

Change logs

  • 0.2.1 : Fixed BlurringView to work with ViewPager (3/2017)
  • 0.2.0 : Mostly re-wrote old outdated code and updated IFs. Noticed Etsy app no longer uses blur... Might re-consider current library structures (3/2017)
  • 0.1.4 : Fix to fall back to Java's fast blur when renderscript is unavailable. (3/2017)
  • 0.1.3 : Fix issues when window has a navigation bar in BlurDialogFragmentHelper. (11/2015)
  • 0.1.2 : Fix zero width/height exception in BlurDialogFragmentHelper. (8/2015)
  • 0.1.1 : Fix NullPointerExcepiton if DialogFragment implements onCreateDialog. (5/2015)
  • 0.1.0 : Initial Release. (12/2014)

License

Copyright 2014 Manabu Shimobe

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • width and height must be > 0 in dialogfragment

    width and height must be > 0 in dialogfragment

    hi thanks for your great library i just want to use dialogfragment i use it in an activity with BlurDialogFragment fragment = BlurDialogFragment.newInstance(); fragment.show(getSupportFragmentManager(), "dialog"); and i get java.lang.IllegalArgumentException: width and height must be > 0

    opened by persiansushiant 6
  • Throw java.lang.IllegalArgumentException: width and height must be > 0

    Throw java.lang.IllegalArgumentException: width and height must be > 0

    I am using material dialogs ( https://github.com/afollestad/material-dialogs ) on my dialog fragment. In my dialog fragment onCreateDialog() method :

    MaterialDialog.Builder dialogBuilder = new MaterialDialog.Builder(getActivity()) .content(R.string.logout_content) .positiveText(R.string.logout_positive) .negativeText(R.string.logout_negative) .callback(new MaterialDialog.ButtonCallback() { @Override public void onPositive(MaterialDialog dialog) { } @Override public void onNegative(MaterialDialog dialog) { } }); MaterialDialog dialog = dialogBuilder.build(); dialog.getWindow().getAttributes().height = WindowManager.LayoutParams.WRAP_CONTENT; dialog.getWindow().getAttributes().width = WindowManager.LayoutParams.WRAP_CONTENT; dialog.show(); return dialog;

    But I faced an error. Error log :

    Caused by: java.lang.IllegalArgumentException: width and height must be > 0 at android.graphics.Bitmap.createBitmap(Bitmap.java:933) at android.graphics.Bitmap.createBitmap(Bitmap.java:912) at android.graphics.Bitmap.createBitmap(Bitmap.java:879) at com.ms.square.android.etsyblur.Util.drawViewToBitmap(Util.java:31) at com.ms.square.android.etsyblur.BlurDialogFragmentHelper.onActivityCreated(BlurDialogFragmentHelper.java:94) at fragment.LogoutFragment.onActivityCreated(LogoutFragment.java:81) at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1797) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120) at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1929) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234) at android.app.Activity.performStart(Activity.java:6412) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2777) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2879) at android.app.ActivityThread.access$900(ActivityThread.java:182) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1475) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6141) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

    bug 
    opened by suleymanccelik 3
  • Screen Edge don't Blur

    Screen Edge don't Blur

    First, I would like to thank you for your effort,

    I have some sort of issue where The Activity Screen is not Fully blurred, as a slim part of it is not blurred,

    i.e. if the Drawer is from the left, ( The far edge on the right is not blurred )

    Thanks,

    opened by MohHeader 3
  • throw NullPointerException if DialogFragment implements onCreateDialog

    throw NullPointerException if DialogFragment implements onCreateDialog

    implement onCreateDialog() instead of onCreateView(), an exception raised:

    java.lang.NullPointerException at com.ms.square.android.etsyblur.Util.animateAlpha(Util.java:61) ... at com.example.AlertDialogFragment.onStart(AlertDialogFragment.java:57) at android.support.v4.app.Fragment.performStart(Fragment.java:1810) ...

    bug 
    opened by xuxucode 2
  • Define onClose Listener

    Define onClose Listener

    Hi

    in DialogFragment example, can you avoid closing of Dialog when user clicks anywhere? can we attach button to onClose Listener to close Dialog?

    Thanks & Regards Prakash

    opened by Prakash19921206 1
  • [Question] Define default animation for dialogue?

    [Question] Define default animation for dialogue?

    I've been playing around with this library a bit, debating whether to use it in my app. Two questions I have are: Is it possible to override the current animation for BlurDialogues? Instead of having the window enter from and exit to the bottom of the screen, I would like if it took the default dialogue transition and simply quickly faded in and out.
    Secondly, is it possible to make the blurred background darker for dialogues? I would like to change it a bit.

    Thanks!

    opened by slaght 1
  • Does this work pre API 17?

    Does this work pre API 17?

    I noticed the min sdk is 8 but it uses ScriptIntrinsicBlur which was added in api 17. http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlur.html

    opened by danieljonker 1
  • Library depends on you

    Library depends on you

    Hi! I need a library to implement blurred images in app (blurred user avatar as a profile background). So I just used your library (very thanks! :-), wrapped it to around ImageView and share throw bintray/github.

    Is it legal?

    opened by egslava 1
  • Blurred Navigation Bar Background

    Blurred Navigation Bar Background

    Hey, i have a Question about EtsyBlur.

    I have expanded my (Android) App Content with FLAG_LAYOUT_NO_LIMITS in the NavBar. Is it possible to blur the Background of the NavBar with EtsyBlur?

    Regards.

    Sorry for my bad English :D

    opened by GalaxJann 0
  • Crash on activity finish

    Crash on activity finish

    After adding a BlurredView, my App crashes when I go to another screen. Note that I don't call blurView.blurredView(View) yet.

    The layout:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="false">
            <!-- my layout -->      
        <com.ms_square.etsyblur.BlurringView
            android:id="@+id/blurView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
    

    The fragment:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        // ...
        blurView.blurConfig(myBlurConfig)
    }
    

    The stack trace:

    2019-12-16 16:59:39.216 21890-21890/? E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.myapp, PID: 21890
        java.lang.RuntimeException: Unable to destroy activity {com.myapp.BlurActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewTreeObserver android.view.View.getViewTreeObserver()' on a null object reference
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4707)
            at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4730)
            at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:39)
            at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7037)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewTreeObserver android.view.View.getViewTreeObserver()' on a null object reference
            at com.ms_square.etsyblur.BlurringView.onDetachedFromWindow(BlurringView.java:105)
            at android.view.View.dispatchDetachedFromWindow(View.java:20067)
            at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987)
            at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5588)
            at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5559)
            at android.view.ViewGroup.removeView(ViewGroup.java:5490)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:973)
            at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
            at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
            at androidx.fragment.app.FragmentManagerImpl.dispatchDestroyView(FragmentManagerImpl.java:2638)
            at androidx.fragment.app.Fragment.performDestroyView(Fragment.java:2805)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:954)
            at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
            at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
            at androidx.fragment.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:2644)
            at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:329)
            at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:366)
            at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:210)
            at android.app.Activity.performDestroy(Activity.java:7681)
            at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1306)
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4692)
    

    The source: https://github.com/Manabu-GT/EtsyBlur/blob/b51c9e80e823fce3590cc061e79e267388b4d8e0/lib/src/main/java/com/ms_square/etsyblur/BlurringView.java#L105

    opened by rubenhorn 0
  • Crashes with App converted to AndroidX on android 5.1 or below devices

    Crashes with App converted to AndroidX on android 5.1 or below devices

    After converting an App to AndroidX it started to crash on Android 5 devices. Regrettably there is no traceback since this happens in the native part. However, the crashes stopped after I removed RealtimeBlurView from the app.

    W/linker: librsjni_androidx.so: unused DT entry: type 0x6000000f arg 0xaf80 librsjni_androidx.so: unused DT entry: type 0x60000010 arg 0x1d librsjni_androidx.so: unused DT entry: type 0x6ffffef5 arg 0xad5c librsjni_androidx.so: unused DT entry: type 0x6ffffffe arg 0xad1c librsjni_androidx.so: unused DT entry: type 0x6fffffff arg 0x2

    --------- beginning of crash
    

    A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 3862 (app.id.here) In this particular case it would be possible to just use vanilla RenderScript instead of the one in support library.

    Thus it would be great if this library would come in multiple flavors vanilla, supportlib and maybe androidx as well in the future.

    opened by jenistops 0
  • NoClassDefFoundError

    NoClassDefFoundError

    java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v8/renderscript/RenderScript; at com.ms_square.etsyblur.RenderScriptBlur.isAvailable(RenderScriptBlur.java:51) at com.ms_square.etsyblur.Blur.(Blur.java:21) at com.ms_square.etsyblur.BlurDialogFragment.onAttach(BlurDialogFragment.java:45) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1404) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411) at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:

    opened by mohitissar 3
  • appcompat-v7:27.1.1 has 'radius' attribute already defined

    appcompat-v7:27.1.1 has 'radius' attribute already defined

    Can't link to EtsyBlur 0.2.1 with dependency to appcompat-v7:27.1.1. Results in error: duplicate value for resource 'attr/radius' with config

    We may have to rename the 'radius' attribute to avoid a clash.

    opened by anthonynosek 0
Releases(v0.2.1)
Owner
Manabu S.
Mobile & Web Engineer / Former Project Manager
Manabu S.
Glass-break effect for views

BrokenView Glass-break effect for views. Demo Download APK Usage Android Studio dependencies { compile 'com.zys:brokenview:1.0.3' } Eclipse Just pu

null 859 Dec 30, 2022
Library project to display DialogFragment with a blur effect.

BlurDialogFragment This project allows to display DialogFragment with a burring effect behind. The blurring part is achieved through FastBlur algorith

tvbarthel 2.1k Dec 29, 2022
Library provides an easy way to a add shimmer effect in Android Compose project.

Add a shimmer effect to the layout in Android Compose

Valery 66 Dec 14, 2022
An easy, flexible way to add a shimmering effect to any view in an Android app.

Shimmer for Android Shimmer is an Android library that provides an easy way to add a shimmer effect to any view in your Android app. It is useful as a

Facebook 5.1k Dec 26, 2022
[] Easily have blurred and transparent background effect on your Android views.

##[DEPRECATED] BlurBehind Easily have blurred and transparent background effect on your Android views. Before API level 14 there was a Window flag cal

Gokberk Ergun 516 Nov 25, 2022
💠Metaphor is the library to easily add Material Motion animations

Metaphor Metaphor is the library to easily add Material Motion animations. Who's using Metaphor? ?? Check out who's using Metaphor Include in your pro

Ranbir Singh 132 Dec 25, 2022
Easily add slide to dismiss functionality to an Activity

Slidr Easily add slide-to-dismiss functionality to your Activity by calling Slidr.attach(this) in your onCreate(..) method. Usage An example usage: pu

Drew Heavner 2.7k Jan 6, 2023
You can easily access the top of the screen in Android. Like a iPhone 6 & 6 Plus.

Reachability on Android Easy access on top. Like a iPhone 6 & 6 Plus. demo apk Usage Add dependencies compile 'com.github.sakebook:Reachability:0.2.0@

sakebook 258 Nov 12, 2022
A lightweight android library that allows to you create custom fast forward/rewind animations like on Netflix.

SuperForwardView About A lightweight android library that allows to you create custom fast forward/rewind animations like on Netflix. GIF Design Credi

Ertugrul 77 Dec 9, 2022
Android StackBlur is a library that can perform a blurry effect on a Bitmap based on a gradient or radius, and return the result. The library is based on the code of Mario Klingemann.

Android StackBlur Android StackBlur is a library that can perform a blurry effect on a Bitmap based on a gradient or radius, and return the result. Th

Enrique López Mañas 3.6k Dec 29, 2022
ShimmerTextView is a simple library to integrate shimmer effect in your TextView.

ShimmerTextView ShimmerTextView is a simple library to integrate shimmer effect in your TextView. Key features Set a base color in ShimmerTextView. Se

MindInventory 22 Sep 7, 2022
A component for flip animation on Android, which is similar to the effect in Flipboard iPhone/Android

android-flip Aphid FlipView is a UI component to accomplish the flipping animation like Flipboard does. A pre-built demo APK file for Android OS 2.2+

Bo 2.8k Dec 21, 2022
Android ImageViews animated by Ken Burns Effect

KenBurnsView Android library that provides an extension to ImageView that creates an immersive experience by animating its drawable using the Ken Burn

Flávio Faria 2.7k Jan 2, 2023
Android L Ripple effect wrapper for Views

Material Ripple Layout Ripple effect wrapper for Android Views Including in your project compile 'com.balysv:material-ripple:1.0.2' Check for latest v

Balys Valentukevicius 2.3k Dec 29, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 2022
:sparkles: An easy way to implement an elastic touch effect for Android.

ElasticViews ✨ An easy way to implement an elastic touch effect for Android. Including in your project Gradle Add below codes to your root build.gradl

Jaewoong Eum 763 Dec 29, 2022
Memory efficient shimmering effect for Android applications by Supercharge.

DEPRECATED - ShimmerLayout Attention: This tool is now deprecated. Please switch to Shimmer for Android or any other shimmer effect solution. ShimmerL

Supercharge 2.5k Jan 4, 2023
A pager for Android with parallax effect

ParallaxPagerTransformer A pager transformer for Android with parallax effect Installation in your build.gradle file dependencies { // ... com

Javier Gonzalez 654 Dec 29, 2022
"Gooey-Effect" for android-compose

Gooey effect for android-compose "Gooey" is a library made to use "gooey-effect" that exists as a CSS trick in android-compose. Download repositories

SeokHo-Im 5 Oct 12, 2022