💧 A slider widget with a popup bubble displaying the precise value selected.

Overview

FLUID SLIDER [KOTLIN]

A slider widget with a popup bubble displaying the precise value selected


We specialize in the designing and coding of custom UI for Mobile Apps and Websites.

Stay tuned for the latest updates:

Inspired by Virgil Pana shot


Twitter Codacy Badge Donate

Requirements

  • Android 4.1 Jelly Bean (API lvl 16) or greater
  • Your favorite IDE

Installation

​ Just download the package from here and add it to your project classpath, or just use the maven repo:

Gradle:

implementation 'com.ramotion.fluidslider:fluid-slider:0.3.1'

SBT:

libraryDependencies += "com.ramotion.fluidslider" % "fluid-slider" % "0.3.1"

Maven:

<dependency>
  <groupId>com.ramotion.fluidslidergroupId>
  <artifactId>fluid-sliderartifactId>
  <version>0.3.1version>
  <type>aartype>
dependency>

Basic usage

Place the FluidSlider in your layout.

To track the current position of the slider, set the positionListener, as shown below:

val slider = findViewById
   
    (R.id.fluidSlider)
slider.positionListener = { p -> Log.d("MainActivity", "current position is: $p" )}

   

You can also track the beginning and completion of the movement of the slider, using the following properties: beginTrackingListener and endTrackingListener. Example below:

slider.beginTrackingListener = { /* action on slider touched */ }
slider.endTrackingListener = { /* action on slider released */ }

Here is simple example, how to change FluidSlider range.

() { @Override public Unit invoke() { Log.d("D", "setBeginTrackingListener"); return Unit.INSTANCE; } }); slider.setEndTrackingListener(new Function0 () { @Override public Unit invoke() { Log.d("D", "setEndTrackingListener"); return Unit.INSTANCE; } }); // Or Java 8 lambda slider.setPositionListener(pos -> { final String value = String.valueOf( (int)((1 - pos) * 100) ); slider.setBubbleText(value); return Unit.INSTANCE; });">
// Kotlin
val max = 45
val min = 10
val total = max - min

val slider = findViewById<FluidSlider>(R.id.fluidSlider)
slider.positionListener = { pos -> slider.bubbleText = "${min + (total  * pos).toInt()}" }
slider.position = 0.3f
slider.startText ="$min"
slider.endText = "$max"

// Java
final FluidSlider slider = findViewById(R.id.fluidSlider);
slider.setBeginTrackingListener(new Function0<Unit>() {
    @Override
    public Unit invoke() {
        Log.d("D", "setBeginTrackingListener");
        return Unit.INSTANCE;
    }
});

slider.setEndTrackingListener(new Function0<Unit>() {
    @Override
    public Unit invoke() {
        Log.d("D", "setEndTrackingListener");
        return Unit.INSTANCE;
    }
});

// Or Java 8 lambda
slider.setPositionListener(pos -> {
    final String value = String.valueOf( (int)((1 - pos) * 100) );
    slider.setBubbleText(value);
    return Unit.INSTANCE;
});

Here are the attributes you can specify through XML or related setters:

  • bar_color - Color of slider.
  • bubble_color - Color of circle "bubble" inside bar.
  • bar_text_color - Color of start and end texts of slider.
  • bubble_text_color - Color of text inside "bubble".
  • start_text - Start (left) text of slider.
  • end_text - End (right) text of slider.
  • text_size - Text size.
  • duration - Duration of "bubble" rise in milliseconds.
  • initial_position - Initial positon of "bubble" in range form 0.0 to 1.0.
  • size - Height of slider. Can be small (40dp) and normal (56dp).

This library is a part of a selection of our best UI open-source projects.

Third Party Bindings

React Native

You may now use this library with React Native via the module here

🗂 Check this library on other language:

📄 License

Fluid Slider Android is released under the MIT license. See LICENSE for details.

This library is a part of a selection of our best UI open-source projects

If you use the open-source library in your project, please make sure to credit and backlink to www.ramotion.com

📱 Get the Showroom App for Android to give it a try

Try this UI component and more like this in our Android app. Contact us if interested.

Comments
  • Parcel crashing on onRestoreInstanceState

    Parcel crashing on onRestoreInstanceState

    Steps to reproduce:

    • Download project
    • Run app
    • Close it
    • Tap on the red square button on Logcat's left size (this will terminate the app and force onSaveInstanceState)
    • Open it again
    • Crash!

    Log:

    2018-07-24 02:27:13.288 30935-30935/com.ramotion.fluidslider.example.simple E/AndroidRuntime: FATAL EXCEPTION: main
     Process: com.ramotion.fluidslider.example.simple, PID: 30935
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ramotion.fluidslider.example.simple/com.ramotion.fluidslider.example.simple.MainActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@cdc64f7: Unmarshalling unknown type code 7209057 at offset 440
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
         at android.app.ActivityThread.-wrap11(Unknown Source:0)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
         at android.os.Handler.dispatchMessage(Handler.java:105)
         at android.os.Looper.loop(Looper.java:164)
         at android.app.ActivityThread.main(ActivityThread.java:6938)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
      Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@cdc64f7: Unmarshalling unknown type code 7209057 at offset 440
         at android.os.Parcel.readValue(Parcel.java:2771)
         at android.os.Parcel.readSparseArrayInternal(Parcel.java:3140)
         at android.os.Parcel.readSparseArray(Parcel.java:2354)
         at android.os.Parcel.readValue(Parcel.java:2749)
         at android.os.Parcel.readArrayMapInternal(Parcel.java:3059)
         at android.os.BaseBundle.unparcel(BaseBundle.java:257)
         at android.os.Bundle.getSparseParcelableArray(Bundle.java:958)
         at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2246)
         at android.app.Activity.onRestoreInstanceState(Activity.java:1153)
         at android.app.Activity.performRestoreInstanceState(Activity.java:1108)
         at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1266)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2928)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
         at android.os.Handler.dispatchMessage(Handler.java:105) 
         at android.os.Looper.loop(Looper.java:164) 
         at android.app.ActivityThread.main(ActivityThread.java:6938) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
    
    opened by bernaferrari 7
  • New logo/icon proposal

    New logo/icon proposal

    Good day sir. I am a graphic designer and i am interested in designing a logo for your good project. I will be doing it as a gift for free. I just need your permission first before I begin my design. Hoping for your positive feedback. Thanks

    opened by mansya 3
  • FluidSlider disable help wanted.

    FluidSlider disable help wanted.

    hello I want to disable the FluidSlider in some condition. I want to stop the user to slide the FluidSlider in some case and in another case they can use the FluidSlider to change value. I tried to use disable and clickable but it's not working. can you please help me with this.

    question 
    opened by sanjaypatel27 2
  • Re-setting position

    Re-setting position

    When I init my activity, I set the position and it successfully works.

    But the second time I try to set the position, the value is set, but the bubble is still in the old position.

    How can I fix that?

    opened by vanpana 2
  • Apply steps

    Apply steps

    It is possible to apply steps in the selected positions?

    For example I want to have a slider where I only can select multiples of 5 between the min and max I defined.

    opened by Andrer757 2
  • How to get Bubble value on setEndTrackingListener?

    How to get Bubble value on setEndTrackingListener?

    Hello, I am using it with java class,I want to get Bubble text value on end tracking.How to get it..?

    fluidSlider.setEndTrackingListener(() -> { return Unit.INSTANCE; });

    opened by harshad008 2
  • Can't install the package when use it in Fragement

    Can't install the package when use it in Fragement

    Installed the package in Gradle tried to use it in Fragement

    `@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, container, false);

        final int max = 10;
        final int min = 0;
        final int total = max - min;
    
        final FluidSlider slider = view.findViewById(R.id.fluidSlider);
    
        slider.setBeginTrackingListener(new Function0<Unit>() {
            @Override
            public Unit invoke() {
                Log.d("D", "setBeginTrackingListener");
                return Unit.INSTANCE;
            }
        });
    
        slider.setEndTrackingListener(new Function0<Unit>() {
            @Override
            public Unit invoke() {
                Log.d("D", "setEndTrackingListener");
                return Unit.INSTANCE;
            }
        });
    
        slider.setPositionListener(pos -> {
            final String value = String.valueOf( (int)((1 - pos) * 100) );
            slider.setBubbleText(value);
            return Unit.INSTANCE;
        });
    
        slider.setPosition(0.3f);
        slider.setStartText(String.valueOf(min));
        slider.setEndText(String.valueOf(max));
    
    
        // Inflate the layout for this fragment
        return view;
    }
    

    `

    I had to manually install it in the XML like this:

    > 
    >     <com.ramotion.fluidslider.FluidSlider
    >         android:id="@+id/fluidSlider"
    >         android:layout_width="376dp"
    >         android:layout_height="58dp"
    >         android:layout_marginStart="16dp"
    >         android:layout_marginTop="32dp"
    >         android:layout_marginEnd="16dp"
    >         android:background="#5C6BC0"
    >         android:elevation="2dp"
    >         app:duration="@android:integer/config_mediumAnimTime"
    >         app:layout_constraintEnd_toEndOf="parent"
    >         app:layout_constraintHorizontal_bias="1.0"
    >         app:layout_constraintStart_toStartOf="parent"
    >         app:layout_constraintTop_toBottomOf="@+id/textView6"
    >         app:size="small"
    >         tools:targetApi="lollipop" />
    

    As i can't find the package in the design - palette Please hlep

    opened by zgao67 1
  • Crash issue in createFromParcel(FluidSlider.kt:206)

    Crash issue in createFromParcel(FluidSlider.kt:206)

    Hi Steps to reproduce

    1. open the application
    2. close it
    3. click the stop button in logcat
    4. open the application fragment crashes showing

    Caused by android.os.BadParcelableException: ClassNotFoundException when unmarshalling: at android.os.Parcel.readParcelableCreator(Parcel.java:2432) at android.os.Parcel.readParcelable(Parcel.java:2358) at android.view.AbsSavedState.(AbsSavedState.java:57) at android.view.View$BaseSavedState.(View.java:21500) at com.ramotion.fluidslider.FluidSlider$State.(FluidSlider.kt:243) at com.ramotion.fluidslider.FluidSlider$State.(FluidSlider.kt:202) at com.ramotion.fluidslider.FluidSlider$State$Companion$CREATOR$1.createFromParcel(FluidSlider.kt:207) at com.ramotion.fluidslider.FluidSlider$State$Companion$CREATOR$1.createFromParcel(FluidSlider.kt:206) at android.os.Parcel.readParcelable(Parcel.java:2367) at android.os.Parcel.readValue(Parcel.java:2264) at android.os.Parcel.readSparseArrayInternal(Parcel.java:2675) at android.os.Parcel.readSparseArray(Parcel.java:1967) at android.os.Parcel.readValue(Parcel.java:2321) at android.os.Parcel.readArrayMapInternal(Parcel.java:2614) at android.os.BaseBundle.unparcel(BaseBundle.java:245) at android.os.Bundle.getSparseParcelableArray(Bundle.java:856) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1361) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269) at androidx.fragment.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3223) at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1526) at androidx.fragment.app.Fragment.onCreate(Fragment.java:1497) at com.daimler.busdetailspage.view.BusDetailFragment.onCreate(BusDetailFragment.java:101) at androidx.fragment.app.Fragment.performCreate(Fragment.java:2414) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269) at androidx.fragment.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3223) at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:190) at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:369) at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:85) at com.daimler.navigation.view.MainActivity.onCreate(MainActivity.java:165) at android.app.Activity.performCreate(Activity.java:6355) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545) at android.app.ActivityThread.access$1100(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5601) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)

    opened by AishwaryaNataraj 1
  • Increment by X value

    Increment by X value

    I am looking to add a way to use increments of 10. So if I had max set to 100, it would jump 10, 20, 30... 80, 90, 100 and allow no other values. Is there any way to currently do this or an easy way to add this functionality?

    For Kotlin, I would guess we would need to modify the ACTION_MOVE event?

    help wanted 
    opened by codeversed 1
  • Does this require AndroidX?

    Does this require AndroidX?

    I am having issues getting this to work with our project and it seems that you need to use AndroidX for this library to compile nicely?

    Error

    Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
      	is also present at [androidx.core:core:1.0.1] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
      	Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:41:5-212:19 to override.
    

    Would it be possible to do a backport or is there a reason that you are using AndroidX? I did not see a seperate branch for Support/Material, maybe I missed it.

    question 
    opened by codeversed 1
  • How to set custom font for bar and bubble ?

    How to set custom font for bar and bubble ?

    First of all i must thanks you for the fantastic library Now my primary doubt is how to set custom font for bar and bubble text ? is there any workaround to add

    question 
    opened by YogeshLegendkiller 1
  • Too large of vertical margin

    Too large of vertical margin

    No way to remove large vertical margin from XML. Understood that more space is needed to have room for bubble pop-up, but there is about 20dp of extra above that that is not desirable with no way to turn off

    opened by cmoore1711 1
  • IllegalArgumentException: pointerIndex out of range

    IllegalArgumentException: pointerIndex out of range

    java.lang.IllegalArgumentException: pointerIndex out of range at android.view.MotionEvent.nativeGetAxisValue(Native Method) at android.view.MotionEvent.getX(MotionEvent.java:2378) at androidx.viewpager.widget.ViewPager.onInterceptTouchEvent(ViewPager.java:2072) at android.view.ViewGroup.checkInterception(ViewGroup.java:2728) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2773) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3226) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2919) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3226) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2919) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3226) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2919) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3226) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2919) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3226) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2919) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3226) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2919) at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:654) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1988) at android.app.Activity.dispatchTouchEvent(Activity.java:4146) at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69) at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69) at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:600) at android.view.View.dispatchPointerEvent(View.java:13791) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5888) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5683) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5127) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5180) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5146) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5303) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5154) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5360) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5127) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5180) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5146) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5154) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5127) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8035) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7986) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7940) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8228) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:233) at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:215) at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:8152) at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:8271) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1057) at android.view.Choreographer.doCallbacks(Choreographer.java:875) at android.view.Choreographer.doFrame(Choreographer.java:769) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042) at android.os.Handler.handleCallback(Handler.java:900)

    opened by TheMelody 0
  • Corner Radius Customization

    Corner Radius Customization

    This PR exposes the ability to customize the slider's corner radius. It defaults to the current value of 2dp.

    For example:

    • XML: app:corner_radius="8dp"
    • Kotlin: slider.barCornerRadius = 8.0f * density
    opened by jvartanian 0
  • Font Customization

    Font Customization

    This PR exposes the ability to customize the slider's font using a font resource.

    For example:

    • XML: app:slider_font="@font/karla"
    • Kotlin: slider.fontId = R.font.karla

    The first attempt at this feature exposed the ability to customize the font using a Typeface directly, but there was no way to serialize the Typeface object in the FluidSlider.State class, so it was decided to allow only font resources.

    opened by jvartanian 0
Owner
Ramotion
UI Engineering, UI/UX Design and Front-End Development Agency
Ramotion
Add Bubble Navigation Bar in Android Jetpack Compose.

BubbleNavigationBarCompose How it looks Setup Open the file settings.gradle (it looks like that) dependencyResolutionManagement { repositoriesMode

Emir Demirli 11 Jan 5, 2023
Automatically filled the declared non-null field is missing or null with default value.

[TOC] Moshi-kotlin-nullsafe 中文版 1. moshi-kotlin moshi-kotlin support kotlin type safe check. When parsing json, fields declared as non-null types may

null 4 Oct 26, 2022
An interactive command line interface to a transactional key value store

Transactional Key-Value Store An interactive command line interface to a transactional key value store. Commands: SET <key> <value> // store the value

Eugene 0 Jan 14, 2022
Clean MVVM with eliminating the usage of context from view models by introducing hilt for DI and sealed classes for displaying Errors in views using shared flows (one time event), and Stateflow for data

Clean ViewModel with Sealed Classes Following are the purposes of this repo Showing how you can remove the need of context in ViewModels. I. By using

Kashif Mehmood 22 Oct 26, 2022
:octocat: ≡ DirectSelect is a selection widget with an ethereal, full-screen modal popup displaying the available choices when the widget is interact with.

DIRECT SELECT [JAVA] Selection widget with an ethereal, full-screen modal popup displaying the available choices We specialize in the designing and co

Ramotion 536 Nov 22, 2022
Tooltip Bubble is an information bubble creator tool.

TooltipBubble It's a simple Tooltip. Installing Add the code block to your project allprojects { repositories { jcenter()

Ally Bros Corporation 4 Oct 4, 2022
Slider-Gallery-Zoom: image slider for android supporting indicator and auto scroll with clicking on image

image slider supporting indicator and auto scroll with clicking on image to open full screen image slider swipe and pinch zoom gestures like gallery,just pass your images and the position of the current image.

Mahmoud Elian 3 May 28, 2022
An IoT based automatic alerting device that consists of laser and a precise Light Dependent Resistor to detect the laser which is employed to constantly monitor the fluid level

An IoT based automatic alerting device that consists of laser and a precise Light Dependent Resistor to detect the laser which is employed to constantly monitor the fluid level. When the fluid level is below the critical level which will be defined by laser, it will alert the patient through buzzer, nurses and doctors through mobile app and the …

null 0 Feb 12, 2022
Chips EditText, Token EditText, Bubble EditText, Spannable EditText and etc.. There are many names of this control. Here I develop easy to understand , modify and integrate Chips Edit Text widget for Android

Chips EditText Library Chips EditText, Token EditText, Bubble EditText, Spannable EditText and etc.. There are many names of this control. Here I deve

kpbird 381 Nov 20, 2022
Android View widget for displaying GIF animations.

gif-movie-view Android View widget for displaying GIF animations. To show animated GIF in your application just add GifMovieView into your layout.

Sergey Bakhtiarov 459 Nov 10, 2022
Android Studio plug-in for generating ButterKnife injections from selected layout XML.

ButterKnifeZelezny Simple plug-in for Android Studio/IDEA that allows one-click creation of Butterknife view injections. How to install in Android Stu

Avast 3.4k Dec 14, 2022
Pixplicity 915 Nov 8, 2022
An android app to display meaning for selected word as notification

Notification Dictionary An Android application to display meaning of selected word as a notification. Features Easy access from all apps that have tex

Karthikeyan Singaravelan 25 Nov 22, 2022
🚀📱💖Animated LazyColumn/Row changes scale/color with animation and have a current selected item like a Pager. An elegant alternative for selecting from a list

Compose AnimatedList Animated infinite and finite LazyRow and LazyColumn with scale and color animations on scroll change based on how far they are to

Smart Tool Factory 47 Nov 16, 2022
A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, panning and animations.

⚡ A powerful & easy to use chart library for Android ⚡ Charts is the iOS version of this library Table of Contents Quick Start Gradle Maven Documentat

Philipp Jahoda 36k Dec 31, 2022
BubbleTabBar is bottom navigation bar with customizable bubble like tabs

BubbleTabBar BubbleTabBar is bottom navigation bar with customizable bubble like tabs Usage <com.fxn.BubbleTabBar android:id="@+id/

Akshay sharma 576 Dec 30, 2022
Android Bubble View

BubbleTextView Custom arrow position Custom fillet radius Custom background color Can be placed anywhere Two default style Two default theme Snapshot

null 669 Nov 11, 2022
Put some bubble in your tabs and give your apps a supa fresh style !

BubbleTab Put some bubble in your tabs and give your apps a supa fresh style ! Usage Add a BubbleTab with your icons on the layout.xml Customisable pa

Florent CHAMPIGNY 535 Nov 18, 2022
Bubble View for Android.

BubbleLayout Bubble View for Android with custom stroke width and color, arrow size, position and direction. BubbleLayout Extends the FrameLayout. Gra

Masayuki Suda 964 Dec 28, 2022