recyclerview fast android android-recyclerview android-scrollbar

android - fast - Color de la barra de desplazamiento en RecyclerView



fast scroll recyclerview (3)

¿Cómo puedo cambiar el color de mi barra de desplazamiento en un recyclerView?

Tengo la barra de desplazamiento pero quiero cambiar su color. Mi recyclerView es así:

<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/recyclerView" android:layout_below="@id/my_toolbar" android:layout_above="@+id/progressBar" android:scrollbars="vertical" />


En caso de que desee personalizar aún más sus barras de desplazamiento, cree dos archivos de recursos dibujables en su carpeta dibujable como 1. scrollbar_track y 2. scrollbar_thumb

scrollbar_track.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="0" android:endColor="#9BA3C5" android:startColor="#8388A4" /> <corners android:radius="6dp" /> </shape>

scrollbar_thumb.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="0" android:endColor="#b20111" android:startColor="#cf1d2d" /> <corners android:radius="6dp" /> </shape>

Ahora, cree un estilo llamado scrollbar_style en su archivo styles.xml como:

<style name="scrollbar_style"> <item name="android:scrollbarAlwaysDrawVerticalTrack">true</item> <item name="android:scrollbarStyle">outsideOverlay</item> <item name="android:scrollbars">vertical</item> <item name="android:fadeScrollbars">true</item> <item name="android:scrollbarThumbVertical">@drawable/scrollbar_thumb</item> <item name="android:scrollbarTrackVertical">@drawable/scrollbar_track</item> <item name="android:scrollbarSize">8dp</item> <item name="android:scrollbarFadeDuration">800</item> <item name="android:scrollbarDefaultDelayBeforeFade">500</item> </style>

Finalmente, para aplicar este estilo a la barra de desplazamiento en su recyclerview, agregue
style="@style/scrollbar_style"
a su recyclerview.

En tu caso:

<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/recyclerView" style="@style/scrollbar_style" android:layout_below="@id/my_toolbar" android:layout_above="@+id/progressBar" android:scrollbars="vertical" />


Puede hacerlo incluyendo la siguiente línea de código en su Recyclerview

android:scrollbarThumbVertical="@drawable/yoursdrawablefile

El archivo dibujable en mi caso es:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#000" android:endColor="#000" android:angle="45"/> <corners android:radius="6dp" /> </shape>


Si necesitas cambiar el color en tiempo de ejecución, esta es la forma.

import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.support.annotation.ColorInt; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; /** * Created on 22.3.2016. * * @author Bojan Kseneman * @description A recycler view that will draw the scroll bar with a different color */ public class CustomScrollBarRecyclerView extends RecyclerView { private int scrollBarColor = Color.RED; public CustomScrollBarRecyclerView(Context context) { super(context); } public CustomScrollBarRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomScrollBarRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setScrollBarColor(@ColorInt int scrollBarColor) { this.scrollBarColor = scrollBarColor; } /** * Called by Android {@link android.view.View#onDrawScrollBars(Canvas)} **/ protected void onDrawHorizontalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) { scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP); scrollBar.setBounds(l, t, r, b); scrollBar.draw(canvas); } /** * Called by Android {@link android.view.View#onDrawScrollBars(Canvas)} **/ protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) { scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP); scrollBar.setBounds(l, t, r, b); scrollBar.draw(canvas); } }

Estos métodos se definen en la clase Vista, por lo que el mismo principio princible debería funcionar con otras vistas como ScrollView y ListView.