A library that easily allows you to mask layouts/viewgroups

Overview

Maskable Layout

Overview

=======================

The Maskable Layout is a simple framelayout that allows you to easily mask views and viewgroups. You can also execute other porterduffxfermodes. Simple Drawables are accepted, as well as AnimationDrawables !

Example

=======================

Usage

======================= This example masks his child element (Imageview) with the mask "animation_mask" and sets the porterDuffXferMode to DST_IN

<com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout
    android:id="@+id/frm_mask_animated"
    android:layout_width="100dp"
    app:porterduffxfermode="DST_IN"
    app:mask="@drawable/animation_mask"
    android:layout_height="100dp">

    <ImageView android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:scaleType="centerCrop"
               android:src="@drawable/unicorn"/>

</com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout>

Building

======================= Fork the repository and include the 'library' module and you are done :) AAR File coming to soon to maven central near you ;)

Or use JitPack: https://jitpack.io/#christophesmet/android_maskable_layout

repositories {
    maven { url 'https://jitpack.io' }
}
    implementation 'com.github.christophesmet:android_maskable_layout:v1.3.1'

License

Copyright 2015 Christophe Smet.

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
  • Setting the mask programmatically seems to not work

    Setting the mask programmatically seems to not work

    When creating a drawable programmatically it doesn't seem to set the mask.

    GradientDrawable drawable = new GradientDrawable();
    drawable.setShape(GradientDrawable.RECTANGLE);
    drawable.setCornerRadius(16);
    drawable.setColor(Color.WHITE);
    mask.setMask(drawable);
    
    opened by nathan-fiscaletti 7
  • Low performance and UI lag when animating layer

    Low performance and UI lag when animating layer

    This is my code that has no lag with frame layout and i animate the inner views very well:

    <FrameLayout
            android:id="@+id/maskFrameLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <com.q42.android.scrollingimageview.ScrollingImageView
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:layout_gravity="bottom"
                scrolling_image_view:speed="0.25dp"
                scrolling_image_view:src="@drawable/world_map" />
    
            <FrameLayout
                android:id="@+id/frame"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:animateLayoutChanges="true">
            </FrameLayout>
        </FrameLayout>
    

    But when i change it to maskable frame layout it gives whole UI a huge lag in animations:

    <com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout
            android:id="@+id/maskFrameLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:mask="@drawable/contact_default_thumb"
            app:porterduffxfermode="SRC_IN">
    
            <com.q42.android.scrollingimageview.ScrollingImageView
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:layout_gravity="bottom"
                scrolling_image_view:speed="0.25dp"
                scrolling_image_view:src="@drawable/world_map" />
    
            <FrameLayout
                android:id="@+id/frame"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:animateLayoutChanges="true">
            </FrameLayout>
        </com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout>
    

    What is wrong that makes this lag appear in the UI?

    opened by Morteza-Rastgoo 7
  • Missing break

    Missing break

    https://github.com/christophesmet/android_maskable_layout/blob/cfa04d0713cedb01383fc3b7a42e46769ba22906/library/src/main/java/com/christophesmet/android/views/maskableframelayout/MaskableFrameLayout.java#L319

    I converted it to kotlin and it gave a overwrite error so I though I mention it :)

    opened by spidfire 4
  • Use B&W Mask

    Use B&W Mask

    Hey! I just need some help because I'm trying to use a mask that is a JPEG file that has white background and the mask part is black. It kinda works but how can I change the color of the mask? I tried applying backgroundTint but It didn't work. This is what I have.

    <com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout
                android:id="@+id/car_bg_base_mask"
                app:porterduffxfermode="OVERLAY"
                app:mask="@drawable/m3_overlay"
                android:elevation="-1dp"
                android:backgroundTint="@color/blue"
                android:layout_height="match_parent"
                android:layout_width="match_parent">
    
                <ImageView
                    android:id="@+id/car_bg_base"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:contentDescription="@string/car_background"/>
    
            </com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout>
    
    opened by dacastro4 4
  • Repo not found or no access token provided

    Repo not found or no access token provided

    Hello, After clicking on the JitPack link: "https://jitpack.io/#christophesmet/android_maskable_layout" I'm getting this text: "Repo not found or no access token provided".

    Also in my project, it says: "Error:(125, 13) Failed to resolve: com.github.christophesmet:android_maskable_layout:-SNAPSHOT".

    opened by avioraboo 4
  • Cropping map fragment removes more than needed

    Cropping map fragment removes more than needed

    Hi,

    Found your project looking for something to crop my Google map to a rounded corners shape. Nothing worked so far. I tried yours and it seems to remove too much. Somehow all the map content is removed, while the minimal Google Map UI can notice is cropped off to the shape I used.

    Left side using the maskable_layout, right side plain map fragment. https://drive.google.com/file/d/16aivbVtTkgFm7eOSF6BWaYlagUwTkFO_/view?usp=sharing

    Any idea what is happening and why the entire map layer is disappearing?

    Thanks.

    opened by GeorgeMincila 3
  • MaskableFrameLayout.dispatchDraw java.lang.RuntimeException:

    MaskableFrameLayout.dispatchDraw java.lang.RuntimeException:

    Report 1 of 4 java.lang.RuntimeException

    com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout.dispatchDraw java.lang.RuntimeException: at android.graphics.BaseCanvas.throwIfCannotDraw (BaseCanvas.java:55) at android.graphics.BaseCanvas.drawBitmap (BaseCanvas.java:120) at android.graphics.Canvas.drawBitmap (Canvas.java:1434) at android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java:529) at android.widget.ImageView.onDraw (ImageView.java:1370) at android.view.View.draw (View.java:19328) at android.view.View.draw (View.java:19192) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout.dispatchDraw (MaskableFrameLayout.java:204) at android.view.View.buildDrawingCacheImpl (View.java:18549) at android.view.View.buildDrawingCache (View.java:18415) at android.view.View.draw (View.java:19037) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.draw (View.java:19331) at android.view.View.updateDisplayListIfDirty (View.java:18257) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.draw (View.java:19331) at android.view.View.updateDisplayListIfDirty (View.java:18257) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at com.xiaopo.flying.sticker.StickerView.dispatchDraw (StickerView.java:199) at android.view.View.draw (View.java:19331) at android.view.View.updateDisplayListIfDirty (View.java:18257) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.updateDisplayListIfDirty (View.java:18243) at android.view.View.draw (View.java:19045) at android.view.ViewGroup.drawChild (ViewGroup.java:4401) at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4180) at android.view.View.draw (View.java:19331) at com.android.internal.policy.DecorView.draw (DecorView.java:974) at android.view.View.updateDisplayListIfDirty (View.java:18257) at android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:676) at android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:682) at android.view.ThreadedRenderer.draw (ThreadedRenderer.java:790) at android.view.ViewRootImpl.draw (ViewRootImpl.java:3091) at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:2884) at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2437) at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1446) at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6954) at android.view.Choreographer$CallbackRecord.run (Choreographer.java:925) at android.view.Choreographer.doCallbacks (Choreographer.java:737) at android.view.Choreographer.doFrame (Choreographer.java:669) at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:911) at android.os.Handler.handleCallback (Handler.java:790) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loop (Looper.java:192) at android.app.ActivityThread.main (ActivityThread.java:6671) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:826)

    opened by smith121321 3
  • support for Vector Drawable

    support for Vector Drawable

    Hi, in api level 18 when set a vector drawable to "mask" attribute I get this error:

    ... android.content.res.Resources$NotFoundException: File {address to resource} from drawable resource ...

    the problem was from this function:

    //Mask functions
    @Nullable
    private Drawable loadMask(TypedArray a) {
        return a.getDrawable(R.styleable.MaskableLayout_mask);
    }
    

    I found a solution here and by using AppCompatResources solved my problem.

    I changed loadMask to this:

    //Mask functions
     @Nullable
     private Drawable loadMask(TypedArray a) {
         final int drawableResId = a.getResourceId(R.styleable.MaskableLayout_mask, -1);
         return AppCompatResources.getDrawable(getContext(), drawableResId);
     }
    
    opened by mojtaba-yekta 3
  • Elevation shadow missing

    Elevation shadow missing

    I've enclosed my linear layout with a maskable layout to mask the rounded edges. Within said linear layout contains a recycler view that has an item view with its elevation attribute set. Somehow, the shadows disappeared when I enclosed this linear layout within the maskable layout.

    <com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout
                android:id="@+id/frm_mask_animated"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                app:porterduffxfermode="DST_IN"
                app:mask="@drawable/bottom_sheet_frame">
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/class_recycler"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/bottom_sheet_frame">
                </android.support.v7.widget.RecyclerView> 
    

    </com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout>

    Here's the original recycler view without the maskable frame layout:

    <android.support.v7.widget.RecyclerView
           android:id="@+id/class_recycler"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="@drawable/bottom_sheet_frame"> 
    </android.support.v7.widget.RecyclerView>
    

    From the layout code above, the original recycler view without the maskable layout allowed the elevation attribute for one of the items in the recycler view to render the drop shadow. However, when I enclosed it within the maskable layout, the shadows disappeared. Here's the view xml for the recycler view item:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@android:color/white">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:layout_marginTop="15dp"
            android:orientation="vertical"
            android:elevation="7dp"
            android:background="@drawable/button_active_bg">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="10dp"
                android:text="@string/level"
                android:gravity="center"
                android:textSize="12sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
            <TextView
                android:id="@+id/column_floor_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingStart="45dp"
                android:paddingEnd="45dp"
                android:paddingBottom="10dp"
                android:text="G"
                android:textStyle="bold"
                android:gravity="center"
                android:textSize="24sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black" />
        </LinearLayout>
        <TextView
            android:id="@+id/column_floor_cost"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="RM5.00/hr"
            android:textColor="@android:color/black"
            android:textSize="13sp"
            android:layout_gravity="center"
            android:gravity="center"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"/>
    </LinearLayout>
    

    Note the linear layout contains elevation attribute set.

    opened by habim84 2
  • Problem with implementation

    Problem with implementation

    I've tried with implementation 'com.github.christophesmet:android_maskable_layout:v1.2.0' (or 'compile') but I have these errors:

    Only 'com.github.christophesmet:android_maskable_layout:d51245736a' works.

    Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.github.christophesmet:android_maskable_layout:v1.1.0. Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.github.christophesmet:android_maskable_layout:v1.1.0. Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.github.christophesmet:android_maskable_layout:v1.1.0. Unable to resolve dependency for ':app@release/compileClasspath': Could not resolve com.github.christophesmet:android_maskable_layout:v1.1.0. Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not resolve com.github.christophesmet:android_maskable_layout:v1.1.0.

    opened by simonesessa 2
  • Out of memory issue

    Out of memory issue

    I am facing out of memory issue on carsh report in huge ammount -

    java.lang.OutOfMemoryError: Failed to allocate a 4170132 byte allocation with 3545088 free bytes and 3MB until OOM

    1 at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 2 at android.graphics.Bitmap.nativeCreate(Native Method) 3 at android.graphics.Bitmap.createBitmap(Bitmap.java:975) 4 at android.graphics.Bitmap.createBitmap(Bitmap.java:946) 5 at android.graphics.Bitmap.createBitmap(Bitmap.java:913) 6 at com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout.android.graphics.Bitmap makeBitmapMask(android.graphics.drawable.Drawable)(MaskableFrameLayout.java:151) 7 at com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout.access$200(MaskableFrameLayout.java:29) 8 at com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout$1.void onGlobalLayout()(MaskableFrameLayout.java:233) 9 at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:982) 10 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2410) 11 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437) 12 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7397) 13 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920) 14 at android.view.Choreographer.doCallbacks(Choreographer.java:695) 15 at android.view.Choreographer.doFrame(Choreographer.java:631) 16 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906) 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:158)

    opened by nitishhhh3 2
  • Masking disappears

    Masking disappears

    I have a masklayout in a recyclerview (so masking to adapter view). But when I go to next screen and come back, masking disappears. How can I fix this please.

    opened by NPatel1090 1
  • Added option to define width and height of mask

    Added option to define width and height of mask

    • added two attributes (width and height of mask) to maskable layout
    • in case of custom dimensions, mask is aligned to center
    • in case of no attributes, match parent is used for mask
    opened by WirecardMobileServices 0
  • General code improvements

    General code improvements

    Hello there, I have some code improvements that I want to add to this amazing library. Would you mind if I start PRing it?

    Ive already did some initial PR bumping to the update gradle and Android Studio 3.0.

    opened by jzeferino 1
  • Update from getInteger to getInt

    Update from getInteger to getInt

    Updated TypedArray.getInteger to TypedArray.getInt get porterduffxfermode

    I don't know if this is experienced by someone but, in my end i'm able to experience a crash in my app because the library throws an UnsupportedOperationException

    Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 1 to integer: type=0x3

    opened by deibeeed 3
  • Jagged edges when container is animated

    Jagged edges when container is animated

    I'm doing a 'pop' animation on a profile picture that's using your code to make it a circle. When I have the scale animation attached to the container it's in then the edges of the circle are really jagged. When I don't have any animation on the profile picture it looks complete fine.

    I'm also not quite sure why the size of the image changes either. I'm scaling from 1.0 to 0.9 back to 1.0.

    Thanks!

    jagged edges

    opened by jonrundle 10
Releases(v1.2.0)
Owner
Christophe Smet
Freelance Developer - Interested in Kotlin, Android, ML, hardware.
Christophe Smet
A library for showing different types of layouts when a list view is empty

Android Empty Layout Please note that this project is not being maintained now. Hopefully a new version will be available soon. A library for showing

Raquib-ul Alam (Kanak) 606 Nov 26, 2022
Repositório para criar layouts e chamar na activity main e melhorar um dos pontos fracos meu (layout).

Repositório para criar layouts e chamar na activity main e melhorar um dos pontos fracos meu (layout). Não se preocupe com os tipos malucos de layouts

Murillo Alves da Silva 1 Dec 14, 2021
It's an Android library that allows you to use Layout as RadioButton or CheckBox.

Android - CompoundLayout It's an Android library that allows you to use Layout as RadioButton or CheckBox. The librarie is Android 14+ compatible. Gra

null 483 Nov 25, 2022
VoronoiView is a view (ViewGroup) that allows you to add and display views inside Voronoi diagram regions.

Vorolay VoronoiView is a view (ViewGroup) that allows you to add and display views inside Voronoi diagram regions. [Voronoi diagram] (https://en.wikip

Daniil Jurjev 918 Dec 4, 2022
ConstraintLayout is an Android layout component which allows you to position and size widgets in a flexible way

ConstraintLayout is a layout manager for Android which allows you to position and size widgets in a flexible way. It's available for both the Android view system and Jetpack Compose.

Android Jetpack 970 Jan 6, 2023
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 Dec 29, 2022
You don’t want your apps look and feel boring, do you? Add some bubbles!

#BubbleAnimationLayout Say hello to Bubble Animation Layout for Android by Cleveroad You don’t want your apps look and feel boring, do you? Add some b

Cleveroad 576 Nov 23, 2022
Allows the easy creation of animated transition effects when the state of Android UI has changed

android-transition Android-Transition allows the easy creation of view transitions that reacts to user inputs. The library is designed to be general e

Kai 615 Nov 14, 2022
An Android library that help you to build app with swipe back gesture.

SwipeBackLayout An Android library that help you to build app with swipe back gesture. Demo Apk GooglePlay Requirement The latest android-support-v4.j

ike_w0ng 6.1k Dec 29, 2022
This library provides a simple way to add a draggable sliding up panel (popularized by Google Music and Google Maps) to your Android application. Brought to you by Umano.

Note: we are not actively responding to issues right now. If you find a bug, please submit a PR. Android Sliding Up Panel This library provides a simp

Umano: News Read To You 9.4k Dec 31, 2022
An Android library that help you to build app with swipe back gesture.

SwipeBackLayout An Android library that help you to build app with swipe back gesture. Demo Apk GooglePlay Requirement The latest android-support-v4.j

ike_w0ng 6.1k Jan 3, 2023
A 3D Layout for Android,When you use it warp other view,it can became a 3D view,一秒让你的view拥有3D效果!

ThreeDLayout A 3D Layout,When you use it warp other view,it can became a 3D view 中文文档 preview USAGE 1.compile library allprojects { repositories {

androidwing 490 Oct 27, 2022
This assignment gives you basically a post list and its detail with comments.🚀

Android Assignment ?? Description This assignment gives you basically a post list and its detail with comments. ?? Features Users can see random post

Okan AYDIN 31 Dec 20, 2022
Android library used to create an awesome Android UI based on a draggable element similar to the last YouTube graphic component.

Draggable Panel DEPRECATED. This project is not maintained anymore. Draggable Panel is an Android library created to build a draggable user interface

Pedro Vicente Gómez Sánchez 3k Jan 5, 2023
SwipeBack is an android library that can finish a activity by using gesture.

SwipeBack SwipeBack is a android library that can finish a activity by using gesture. You can set the swipe direction,such as left,top,right and botto

Eric 1.7k Nov 21, 2022
A very simple arc layout library for Android

ArcLayout A very simple arc layout library for Android. Try out the sample application on the Play Store. Usage (For a working implementation of this

ogaclejapan 1.4k Dec 26, 2022
Bubbles for Android is an Android library to provide chat heads capabilities on your apps. With a fast way to integrate with your development.

Bubbles for Android Bubbles for Android is an Android library to provide chat heads capabilities on your apps. With a fast way to integrate with your

Txus Ballesteros 1.5k Jan 2, 2023
A floating menu library for Android.

Hover Hover is a floating menu implementation for Android. Goals The goals of Hover are to: Provide an easy-to-use, out-of-the-box floating menu imple

Google 2.7k Dec 27, 2022