Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d28c3b3 authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Address b/2064664 by setting mThumbOffset to half the width of the thumb by default.

mThumbOffset previously defaulted to 0, which caused drawing artifacts at
extrema of very long SeekBars.

The thumb offset can still be overridden by declaring android:thumbOffset in
layout or calling SeekBar.setThumbOffset(int).

Bug: 2064664
parent 1c1629da
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -64,10 +64,10 @@ public abstract class AbsSeekBar extends ProgressBar {
        TypedArray a = context.obtainStyledAttributes(attrs,
                com.android.internal.R.styleable.SeekBar, defStyle, 0);
        Drawable thumb = a.getDrawable(com.android.internal.R.styleable.SeekBar_thumb);
        setThumb(thumb);
        setThumb(thumb); // will guess mThumbOffset if thumb != null...
        // ...but allow layout to override this
        int thumbOffset =
                a.getDimensionPixelOffset(com.android.internal.R.styleable.SeekBar_thumbOffset, 0);
        setThumbOffset(thumbOffset);
                a.getDimensionPixelOffset(com.android.internal.R.styleable.SeekBar_thumbOffset, getThumbOffset());
        a.recycle();

        a = context.obtainStyledAttributes(attrs,
@@ -77,13 +77,21 @@ public abstract class AbsSeekBar extends ProgressBar {
    }

    /**
     * Sets the thumb that will be drawn at the end of the progress meter within the SeekBar
     * Sets the thumb that will be drawn at the end of the progress meter within the SeekBar.
     * <p>
     * If the thumb is a valid drawable (i.e. not null), half its width will be
     * used as the new thumb offset (@see #setThumbOffset(int)).
     * 
     * @param thumb Drawable representing the thumb
     */
    public void setThumb(Drawable thumb) {
        if (thumb != null) {
            thumb.setCallback(this);

            // Assuming the thumb drawable is symmetric, set the thumb offset
            // such that the thumb will hang halfway off either edge of the
            // progress bar.
            mThumbOffset = (int)thumb.getIntrinsicWidth() / 2;
        }
        mThumb = thumb;
        invalidate();