A realtime blurring overlay for Android (like iOS UIVisualEffectView)

Overview

RealtimeBlurView

It's just a realtime blurring overlay like iOS UIVisualEffectView.

IMG

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

Adding to project

Add dependencies in your build.gradle:

	dependencies {
	    implementation 'com.github.mmin18:realtimeblurview:1.2.1'
	}

Support API level < 19

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.** { *; }

Limitations

  • 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

Performance

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.

Nexus5

Changelog

1.2.1 (2019-05-24)

Improve BlurImpl detection.

1.2 (2019-05-22)

Support both AndroidX and Android Support Library.

1.1.2 (2018-05-28)

Bug fix (Draw overlay color in rect).

1.1.1 (2018-05-22)

Fix downsample factor issue when blur radius is very big.

1.1.0 (2017-01-02)

Some improvements (OOM, resize, window background)

1.0.8 (2016-11-29)

Fix view not refreshed issue on PopupWindow

1.0.6 (2016-11-7)

Fix crash when view is very small (draw at least 1px)

1.0.5 (2016-11-5)

Support Popup Window (Use it as dialog background) Ignore UnsatisfiedLinkError if APK is not debuggable.

1.0.4 (2016-9-28)

Support custom shape (by override drawBlurredBitmap()), support view in ContextThemeWrapper.

Comments
  • Crashes with App converted to AndroidX on older versions of Android

    Crashes with App converted to AndroidX on older versions of Android

    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. Others suggest this solution as well.

    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 znerol 5
  • AndroidX app crashed on older Android versions using the library V1.2

    AndroidX app crashed on older Android versions using the library V1.2

    I've just updated the library to V1.2 and it still crashes on older Android versions. Tested on Emulator and phone with Android 5.1.1. This issue seems to be caused by a bug in androidx.renderscript library itself, as reported in this issue tracker: https://issuetracker.google.com/issues/119582492

    App Config

    buildToolsVersion '28.0.3'
    defaultConfig {
           minSdkVersion 19
           targetSdkVersion 28
           renderscriptTargetApi 19             // Crashed regardless of adding this config or not
           renderscriptSupportModeEnabled true
       }
    
    Last Exception Backtrace
    --
    0 | androidx.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/<packagename>-2/lib/arm64/librsjni_androidx.so" Support lib API: 2301
    1 | at androidx.renderscript.RenderScript.internalCreate(RenderScript.java:1414)
    2 | at androidx.renderscript.RenderScript.create(RenderScript.java:1599)
    3 | at androidx.renderscript.RenderScript.create(RenderScript.java:1549)
    4 | at androidx.renderscript.RenderScript.create(RenderScript.java:1525)
    5 | at androidx.renderscript.RenderScript.create(RenderScript.java:1512)
    6 | at com.github.mmin18.widget.AndroidXBlurImpl.prepare(AndroidXBlurImpl.java:20)
    7 | at com.github.mmin18.widget.RealtimeBlurView.prepare(RealtimeBlurView.java:186)
    8 | at com.github.mmin18.widget.RealtimeBlurView$1.onPreDraw(RealtimeBlurView.java:206)
    9 | at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
    10 | at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2144)
    11 | at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
    12 | at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6243)
    13 | at android.view.Choreographer$CallbackRecord.run(Choreographer.java:773)
    14 | at android.view.Choreographer.doCallbacks(Choreographer.java:586)
    15 | at android.view.Choreographer.doFrame(Choreographer.java:556)
    16 | at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:759)
    17 | at android.os.Handler.handleCallback(Handler.java:739)
    18 | at android.os.Handler.dispatchMessage(Handler.java:95)
    19 | at android.os.Looper.loop(Looper.java:160)
    20 | at android.app.ActivityThread.main(ActivityThread.java:5541)
    21 | at java.lang.reflect.Method.invoke(Native Method)
    22 | at java.lang.reflect.Method.invoke(Method.java:372)
    23 | at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
    24 | at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
    
    
    opened by chanont-poon 4
  • BlurView is not working in signed-release apk

    BlurView is not working in signed-release apk

    Hi,

    Thanks for this useful component. It works in debug mode as expected but i cannot get the blurview work in signed release apk. Is there any configuration for release mode? Any proguard rules?

    SIGNED RELEASE APK

    release

    DEBUG APK

    debug

    Thanks in advance...

    opened by madiguzel 4
  • Use ObjectAnimator and BlurView together then UI frames drop a lot.

    Use ObjectAnimator and BlurView together then UI frames drop a lot.

    Activity has one BlurView. I show some Views by using ObjectAnimator. Frames drop too many.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/colors">
    
        <com.github.mmin18.widget.RealtimeBlurView
            android:id="@+id/blurView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"
            app:realtimeBlurRadius="10dp"
            app:realtimeOverlayColor="#BB000000" />
    
        <Button
            android:id="@+id/source"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="30dp"
            android:background="@drawable/shape_circle"
            android:text="+"
            android:textSize="50sp" />
    
    </RelativeLayout>
    
    private void doExpandAnim() {
        blurView.setVisibility(View.VISIBLE);
    
        PropertyValuesHolder z1 = PropertyValuesHolder.ofFloat("alpha", 0, 1);
        ObjectAnimator z = ObjectAnimator.ofPropertyValuesHolder(blurView, z1);
        z.setInterpolator(new LinearInterpolator());
        z.setDuration(350);
    
        PropertyValuesHolder c1 = PropertyValuesHolder.ofFloat("rotation", 0, 360 + 45);
        ObjectAnimator c = ObjectAnimator.ofPropertyValuesHolder(source, c1);
        c.setDuration(350);
    
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(z, c);
        animatorSet.start();
    }
    
    private void doCollapseAnim() {
        PropertyValuesHolder z1 = PropertyValuesHolder.ofFloat("alpha", 1, 0);
        ObjectAnimator z = ObjectAnimator.ofPropertyValuesHolder(blurView, z1);
        z.setInterpolator(new LinearInterpolator());
        z.setDuration(350);
        z.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                blurView.setVisibility(View.GONE);
            }
        });
    
        PropertyValuesHolder c1 = PropertyValuesHolder.ofFloat("rotation", 360 + 45, 0);
        ObjectAnimator c = ObjectAnimator.ofPropertyValuesHolder(source, c1);
        c.setDuration(350);
    
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(z, c);
        animatorSet.start();
    }
    
    opened by imknown 3
  • 我的buildToolsVersion 是28了

    我的buildToolsVersion 是28了

    java.lang.RuntimeException: Error loading RS jni library, Upgrade buildToolsVersion="24.0.2" or higher may solve this issue at com.github.mmin18.widget.RealtimeBlurView.prepare(RealtimeBlurView.java:151) at com.github.mmin18.widget.RealtimeBlurView$1.onPreDraw(RealtimeBlurView.java:222) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:977) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2402) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1439) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6899)

    opened by zanezha0 2
  • WIP: vanilla flavor

    WIP: vanilla flavor

    Addresses #28

    • Isolate blur implementation into a BlurImpl class.
    • Add vanilla and supportlib flavors to the build process.

    This is work-in-progress. Comments very welcome.

    opened by znerol 2
  • Cannot blur 'Baidu MapView' and 'SurfaceView'

    Cannot blur 'Baidu MapView' and 'SurfaceView'

    I've read the urls below:

    http://stackoverflow.com/questions/24317041/google-maps-with-blur-layer https://github.com/flurgle/BlurKit-Android#to-do-incoming

    Any way to do that? :[

    screenshot_2017-03-02-16-36-47-53

    opened by imknown 2
  • Context doesn't extend Activity

    Context doesn't extend Activity

    On ViewTreeObserver.OnPreDrawListener.onPreDraw getContext() doesn't return an Activity but a ContextThemeWrapper. Activity extends ContextThemeWrapper. In my app I use only one activity and then handle fragments through back stack.

    At line 194 View decor = ((Activity) getContext()).getWindow().getDecorView(); an exception is being thrown java.lang.ClassCastException: android.support.v7.view.ContextThemeWrapper cannot be cast to android.app.Activity.

    It seems more appropriate to replace it with this View decor = ((Activity) ((ContextThemeWrapper) getContext()).getBaseContext()).getWindow().getDecorView();

    opened by gkravas 2
  • windowShowWallpaper

    windowShowWallpaper

    Is it possible to make it work with windowShowWallpaper to blur the wallpaper? This creates a really cool effect. Tried using the WallpaperManager method but didn't work with live wallpapers and didn't really crop as the launcher cropped it.

    opened by ErikReider 1
  • Numerous errors on import

    Numerous errors on import

    Imported both library and sample modules but now gradle fails to build. I tried using suggested strings from readme but following strings cause sync to fail misarably.

        compileSdkVersion rootProject.ext.compileSdkVersion
        buildToolsVersion rootProject.ext.buildToolsVersion
    
        defaultConfig {
            minSdkVersion rootProject.ext.minSdkVersion
            targetSdkVersion rootProject.ext.targetSdkVersion
    
        lintOptions {
            abortOnError rootProject.ext.lintAbortOnError
        }
    
        compileOptions {
            sourceCompatibility rootProject.ext.sourceCompatibility
            targetCompatibility rootProject.ext.targetCompatibility
        }
    

    I don't even know why it is different from readme strings. Maybe sample was an extra that is not required?

    opened by originalkaratechop 1
  • Dynamic contents under the blurView overlay show the 'straight lines'.

    Dynamic contents under the blurView overlay show the 'straight lines'.

    T_ T

    When i slide the ListView in a Fragment under the blurView overlay in the hosted Activity, and the ListView shows straight lines as the picture uploaded below..

    screenshot_2017-03-02-16-37-17-60

    opened by imknown 1
  • Exception java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference

    Exception java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference

    Exception java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4082) at android.view.View.draw (View.java:19323) at android.view.View.buildDrawingCacheImpl (View.java:18540) at android.view.View.buildDrawingCache (View.java:18396) at android.view.View.draw (View.java:19022) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19323) at androidx.viewpager.widget.ViewPager.draw (ViewPager.java:2426) at android.view.View.draw (View.java:19179) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19177) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19177) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19177) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19177) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19177) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19177) at android.view.ViewGroup.drawChild (ViewGroup.java:4297) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4083) at android.view.View.draw (View.java:19323) at com.android.internal.policy.DecorView.draw (DecorView.java:789) at com.github.mmin18.widget.RealtimeBlurView$1.onPreDraw (RealtimeBlurView.java:265) at android.view.ViewTreeObserver.dispatchOnPreDraw (ViewTreeObserver.java:977) at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2446) at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1438) at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6982) at android.view.Choreographer$CallbackRecord.run (Choreographer.java:913) at android.view.Choreographer.doCallbacks (Choreographer.java:725) at android.view.Choreographer.doFrame (Choreographer.java:660) at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:899) at android.os.Handler.handleCallback (Handler.java:790) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loop (Looper.java:164) at android.app.ActivityThread.main (ActivityThread.java:6548) at java.lang.reflect.Method.invoke (Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:857)

    opened by ali-imran 0
  • android.renderscript.RSInvalidStateException: Calling RS with no Context active

    android.renderscript.RSInvalidStateException: Calling RS with no Context active

    android.renderscript.RSInvalidStateException: Calling RS with no Context active. at android.renderscript.RenderScript.validate(RenderScript.java:1255) at android.renderscript.Allocation.copyFrom(Allocation.java:992) at t4.a.a(AndroidStockBlurImpl.java:1) at com.github.mmin18.widget.RealtimeBlurView.j(RealtimeBlurView.java:1) at com.github.mmin18.widget.RealtimeBlurView$a.onPreDraw(RealtimeBlurView.java:26) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2854) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1817) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7779) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031) at android.view.Choreographer.doCallbacks(Choreographer.java:854) at android.view.Choreographer.doFrame(Choreographer.java:789) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016) at android.os.Handler.handleCallback(Handler.java:914) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:227) at android.app.ActivityThread.main(ActivityThread.java:7582) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:953)

    opened by frank86225383 4
  • Usage on Jetpack Compose

    Usage on Jetpack Compose

    There isn't a straightforward way to use this on Jetpack Compose yet. Could it be possible to provide a Composable component that can use the RealTimeBlurView library? Thank you!

    opened by ComposeDesigner 0
  • 应用中有RealtimeBlur使用,切到后台运行回来后偶现闪退问题.

    应用中有RealtimeBlur使用,切到后台运行回来后偶现闪退问题.

    ************* Crash Head **************** Time Of Crash      : 2021_10_13-16_50_37 Rom Info           : RomInfo{name=huawei, version=11.0.0} Device Manufacturer: HUAWEI Device Model       : YAL-L21 Android Version    : 10 Android SDK        : 29 App VersionName    : 3.0.1-dev App VersionCode    : 17429 ************* Crash Head ****************

    java.util.ConcurrentModificationException at java.util.ArrayList$Itr.next(ArrayList.java:860) at androidx.constraintlayout.motion.widget.MotionLayout.processTransitionCompleted(MotionLayout.java:3746) at androidx.constraintlayout.motion.widget.MotionLayout.fireTransitionCompleted(MotionLayout.java:3733) at androidx.constraintlayout.motion.widget.MotionLayout.setState(MotionLayout.java:1061) at androidx.constraintlayout.motion.widget.MotionLayout.evaluate(MotionLayout.java:3124) at androidx.constraintlayout.motion.widget.MotionLayout.dispatchDraw(MotionLayout.java:2878) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1882) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1882) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21615) at android.view.ViewGroup.drawChild(ViewGroup.java:4605) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4364) at android.view.View.draw(View.java:21751) at com.android.internal.policy.DecorView.draw(DecorView.java:1111) at com.github.mmin18.widget.RealtimeBlurView$1.onPreDraw(RealtimeBlurView.java:265) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1098) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3279) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2109) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8575) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1256) at android.view.Choreographer.doCallbacks(Choreographer.java:995) at android.view.Choreographer.doFrame(Choreographer.java:887) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1224) at android.os.Handler.handleCallback(Handler.java:900) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8393) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)

    opened by Pacyx 0
Owner
Tu Yimin
Tu Yimin
A Jetpack Compose library with blur, pixelate, and other effects to keep your designer happy. Inspired by iOS UIVisualEffectView.

A Jetpack Compose library with blur, pixelate, and other effects to keep your designer happy. Inspired by iOS UIVisualEffectView.

清茶 57 Sep 12, 2022
A tiny window overlay to log app internal on top of your android app

DebugOverlay A logcat alike overlay to display log messages in your app as independent overlay. Typically in android you would log some app internals

Hannes Dorfmann 151 Sep 9, 2022
Realtime, Accurate Background Changer, Portrait Segmentation, Portrait Matting, Background Removal for Android

Realtime Background Changer on Camera Stream Realtime, Accurate Background Changer, Portrait Segmentation, Portrait Matting, Background Removal SDK fo

FaceOnLive 81 Aug 31, 2022
The ShowcaseView library is designed to highlight and showcase specific parts of apps to the user with an attractive and flat overlay.

The ShowcaseView library is designed to highlight and showcase specific parts of apps to the user with an attractive and flat overlay.

Mohammad Reza Eram 463 Sep 30, 2022
An Android library supports badge notification like iOS in Samsung, LG, Sony and HTC launchers.

ShortcutBadger: The ShortcutBadger makes your Android App show the count of unread messages as a badge on your App shortcut! Supported launchers: Sony

Leo Lin 7.2k Sep 30, 2022
A Tinder-like Android library to create the swipe cards effect. You can swipe left or right to like or dislike the content.

Swipecards Travis master: A Tinder-like cards effect as of August 2014. You can swipe left or right to like or dislike the content. The library create

Dionysis Lorentzos 2.3k Sep 29, 2022
Created a Tinder like Card Deck & Captain Train like Toolbar

TinderView Created A Simple and Beautiful Tinder like card deck & Captain Train like toolbar. This is heavily based on AndroidSwipeableCardStack, wenc

Aradh Pillai 328 Jun 18, 2022
ios UISegmentedControl for android

android-segmented-control Android-Segmented is a custom view for Android which is based on RadioGroup and RadioButton widget. This implementation is i

Kaopiz Software Co., Ltd. 1.9k Sep 22, 2022
ios UISegmentedControl for android

android-segmented-control Android-Segmented is a custom view for Android which is based on RadioGroup and RadioButton widget. This implementation is i

Kaopiz Software Co., Ltd. 1.9k Sep 22, 2022
iOS UIActionSheet for Android

ActionSheet This is like iOS UIActionSheet component, has iOS6 and iOS7 style, support custom style, background, button image, text color and spacing

星一 810 Sep 7, 2022
A Popover Controller for Android Tablets. It's an easy solution to simulate an iOS UIPopoverController

PopoverView A Popover Controller for Android Tablets. It's an easy solution to simulate an iOS UIPopoverController Base example 9patch image comes fro

Daniel Lupiañez Casares 204 May 24, 2022
Simple and powerful library to emulate iOS's "3D Touch" preview functionality on Android.

Android 3D Touch - PeekView iOS uses 3D Touch as a way to "peek" into full content, such as emails, pictures, web searches, etc. While they have dedic

Luke Klinker 504 Apr 21, 2022
Multiplatform UI DSL with screen management in common code for mobile (android & ios) Kotlin Multiplatform development

Mobile Kotlin widgets This is a Kotlin MultiPlatform library that provides declarative UI and application screens management in common code. You can i

IceRock Development 314 Sep 23, 2022
TileView is a subclass of android.view.ViewGroup that asynchronously displays, pans and zooms tile-based images. Plugins are available for features like markers, hotspots, and path drawing.

This project isn't maintained anymore. It is now recommended to use https://github.com/peterLaurence/MapView. MapView is maintained by Peter, one of o

Mike Dunn 1.5k Sep 27, 2022
Takes the input from the Android MediaPlayer and displays visualizations, like in iTunes or WinAmp

Android Visualizer A View subclass that Takes the input from the Android MediaPlayer and displays visualizations, like in iTunes or WinAmp The Visuali

null 799 Sep 19, 2022
Android-ScrollBarPanel allows to attach a View to a scroll indicator like it's done in Path 2.0

Path 2.0 like ScrollBarPanel for Android Android-ScrollBarPanel allows to attach a View to a scroll indicator like it's done in Path 2.0. Features Sup

Arnaud Vallat 553 Jun 14, 2022
Pinterest like awesome menu control for Android

Pinterest like awesome menu control for Android DEMO NOTE Any pull request is available. HOW TO USE /** * PinterestView'layoutPar

Bruce too 420 Sep 24, 2022
This is a android custom view , like a scratch card effect!

ScratchView This is a android custom view , like a scratch card effect! Last Update 采纳DearZack童鞋的优化思路,把计算擦除面积比例的操作放在手指离开屏幕时,以降低对CPU的占用。 Articles Scrat

D_clock爱吃葱花 317 Aug 13, 2022
An Android custom view to display digits rendered as dots in a grid, with a style like a 1970s LED clock.

#DotMatrixView This is an Android library project providing a custom view that can display things on a grid of dots. When the displayed value changes,

Mark Roberts 48 Apr 21, 2022