Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

fast scroll custom thumb

how can i set custom thumb for fast scroll in listview.

like image 821
Mojo Risin Avatar asked May 03 '10 13:05

Mojo Risin


2 Answers

you can set that into the style.xml

<style name="Theme_app" parent="@android:style/Theme.Holo.Light">
    <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>

 </style>

than create an xml in Drawable for the image

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/fastscroll_thumb_pressed_holo" />
    <item android:drawable="@drawable/fastscroll_thumb_default_holo" />
</selector>
like image 135
douarbou Avatar answered Oct 16 '22 02:10

douarbou


Setting the Drawable from styles is the way to go. However, if you want to do this programmatically here are two methods that should be useful:

/**
 * Set a ListView or GridView fast scroll thumb image.
 * 
 * @param listView The {@link android.widget.ListView} or {@link android.widget.GridView}
 * @param thumb The fast-scroll drawable
 * @return {@code true} if successfully set.
 */
public static boolean setFastScrollThumbImage(AbsListView listView, Drawable thumb) {
    try {
        Field f;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            f = AbsListView.class.getDeclaredField("mFastScroll");
        } else {
            f = AbsListView.class.getDeclaredField("mFastScroller");
        }
        f.setAccessible(true);
        Object o = f.get(listView);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            f = f.getType().getDeclaredField("mThumbImage");
            f.setAccessible(true);
            ImageView iv = (ImageView) f.get(o);
            iv.setImageDrawable(thumb);
        } else {
            f = f.getType().getDeclaredField("mThumbDrawable");
            f.setAccessible(true);
            Drawable drawable = (Drawable) f.get(o);
            drawable = thumb;
            f.set(o, drawable);
        }
        return true;
    } catch (Exception ignored) {
    }
    return false;
}

/**
 * Set a ListView or GridView fast scroll thumb color.
 * 
 * @param listView The {@link android.widget.ListView} or {@link android.widget.GridView}
 * @param color The color for the fast-scroll thumb
 * @return {@code true} if successfully set.
 */
public static boolean setFastScrollThumbColor(AbsListView listView, int color) {
    try {
        Field f;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            f = AbsListView.class.getDeclaredField("mFastScroll");
        } else {
            f = AbsListView.class.getDeclaredField("mFastScroller");
        }
        f.setAccessible(true);
        Object o = f.get(listView);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            f = f.getType().getDeclaredField("mThumbImage");
            f.setAccessible(true);
            ImageView iv = (ImageView) f.get(o);
            iv.setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_ATOP);
        } else {
            f = f.getType().getDeclaredField("mThumbDrawable");
            f.setAccessible(true);
            final Drawable drawable = (Drawable) f.get(o);
            drawable.setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_ATOP);
        }
        return true;
    } catch (Exception ignored) {
    }
    return false;
}
like image 44
Jared Rummler Avatar answered Oct 16 '22 00:10

Jared Rummler