Skip to content

I3eyonder/android-standalone-scroll-bar

Repository files navigation

Demo

Integration

Gradle:

This library is available on jitpack.io.

Step 1. Add the JitPack repository to your build file

Add it in your settings.gradle.kts at the end of repositories:

dependencyResolutionManagement {
	repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
	repositories {
		mavenCentral()
		maven { url = uri("https://jitpack.io") }
	}
}
Step 2. Add the dependency

implementation("com.github.I3eyonder:android-standalone-scroll-bar:Tag")

Usage

Xml

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

<com.hieupt.android.standalonescrollbar.StandaloneScrollBar
        android:id="@+id/scrollbar"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />

Code

scrollbar.attachTo(recyclerView)

To using with [NestedScrollView, ScrollView, HorizontalScrollView, WebView], please use [NestedScrollView2, ScrollView2, HorizontalScrollView2, WebView2] for your layout instead.

scrollbar.attachTo(nestedScrollView2)

You can also implement your own ScrollableView to use StandaloneScrollBar with any View. You can refer VerticalScrollViewHelper or HorizontalScrollViewHelper for example of implementation.

scrollbar.attachTo(scrollableView)

Customization

scrollbar.visibilityManager = YourCustomVisibilityManager()

Attention:

  1. The logic for showing/hiding of a VisibilityManager is implemented differently, so changing the VisibilityManager midway can lead to conflicts. Therefore, to avoid potential errors, the VisibilityManager must be set before the scrollbar is attached to the view.
  2. Track/thumb should not be hidden using the GONE view. Doing so may affect the calculation of the track/thumb’s size and position. Instead, using INVISIBLE is a better approach.

  • Custom track/thumb drawable using attribute scrollbarTrackDrawable and scrollbarThumbDrawable or through java/kotlin
scrollbar.customTrackDrawable = customDrawable
scrollbar.customThumbDrawable = customDrawable

  • Tint track/thumb by using attribute scrollbarDefaultTrackTint and scrollbarDefaultThumbTint
scrollbar.defaultThumbTint = ColorStateList()
scrollbar.defaultTrackTint = ColorStateList()

  • Custom thumb length by using attribute scrollbarThumbLength|scrollbarThumbLengthByTrackRatio|scrollbarMinThumbLength|scrollbarAutoThumbLength. If multi attributes is set, the priorities order will be scrollbarThumbLength > scrollbarThumbLengthByTrackRatio > scrollbarAutoThumbLength
scrollbar.thumbLength = desireLengthInPx
scrollbar.thumbLengthByTrackRatio = percentOfTrackLength //[0.0..1.0]
scrollbar.minThumbLength = desireLengthInPx
scrollbar.autoThumbLength = true|false

  • Enable/Disable thumb bar drag ability using attribute scrollbarDraggable
scrollbar.draggable = true|false

  • Delay duration before scrollbar auto hide in milliseconds (attribute scrollbarDelayBeforeAutoHideDuration)

    There are 2 special constants:

    • StandaloneScrollBar.AUTO_HIDE_SCROLLBAR_DELAY_INFINITY_MILLIS(attribute value infinity): This cause scrollbar always shown.
    • StandaloneScrollBar.AUTO_HIDE_SCROLLBAR_DELAY_ZERO_MILLIS(attribute value zero): This cause scrollbar always hidden.
scrollbar.delayBeforeAutoHide = delayTimeInMillis