androidxmlkotlinsliderandroid-slider

Android sliders with fixed numbers


I'm trying to implement a discrete slider with fixed values, but the only thing I can set is the valueFrom, valueTo and stepSize.

Here is my code how I'm trying to do

<com.google.android.material.slider.Slider
        android:id="@+id/slider"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:padding="8dp"
        app:tickColor="@color/colorSecondaryLight"
        app:tickColorActive="@color/colorSecondary" />

Is there a way to set fixed values on the slider? (Values that I will use 2, 5, 10, 25, 50 and 100)


Solution

  • UPDATE NOV 27, 2024

    As Eldo informed in his response, there is a different dependency for the BubbleSeekBar

    implementation "com.github.koliong:BubbleSeekBar:2.1.1"
    

    NOTE: Nothing is informed in the original repository in the link above

    NOTE 2: New repository documentation -> NewBubbleSeekBar

    ORIGINAL ANSWER

    The solution that worked for me was this lib called BubbleSeekBar

    Step 1 - Add the dependencies on your Gradle.

    implementation "com.xw.repo:bubbleseekbar:3.20-lite"
    

    Step 2 - Create your BubbleSeekBar on your XML and add the attributes that you need. For my case, the example below worked.

    <com.xw.repo.BubbleSeekBar
            android:id="@+id/bubbleSeekBar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:bsb_auto_adjust_section_mark="true"
            app:bsb_hide_bubble="true"
            app:bsb_min="2"
            app:bsb_section_count="5"
            app:bsb_section_text_position="below_section_mark"
            app:bsb_seek_by_section="true" />
    

    Step 3 - Since I needed custom options, I initialized on my onCreate with the array of values declared on my string.xml

    bubbleSeekBar.setCustomSectionTextArray { sectionCount, array ->
                array.clear()
                for ((index, value) in resources.getStringArray(R.array.xxxx)
                    .withIndex()) {
                    array.put(index, value)
                }
                array
            }
    

    Step 4 - You can capture the changes or set a value with the methods below.

    bubbleSeekBar.onProgressChangedListener
    bubbleSeekBar.setProgress()
    

    The lib is pretty good and worked for me. For more info take a look at the link at the top of this answer.