David
David

Reputation: 3105

seekbar thumb onclicklistener

I need to customize default android seekbar to control music player. I know this sounds very simple, but I just don't know how to set up seekbar thumb listener. I want to control music and change icon accordingly to play and pause when user press on seekbar thumb icon. How can I achieve this? I know that this is possible because I previously saw apps like PocketGuide where this functionality is implemented. Here's the screenshot from PocketGuide app enter image description here

Upvotes: 1

Views: 1010

Answers (1)

Kenny Seyffarth
Kenny Seyffarth

Reputation: 1026

Maybe this helps you. Adjust the code for your needs.

public class SeekbarWithThumbTouch extends SeekBar {

    private int     scaledTouchSlop = 0;
    private float   initTouchX      = 0;
    private boolean thumbPressed    = false;

    public SeekbarWithThumbTouch(Context context) {
        super(context);
        init(context);
    }

    public SeekbarWithThumbTouch(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public SeekbarWithThumbTouch(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Drawable thumb = null;
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                thumb = getThumb();//works only for API >=16!
                if (thumb != null) {
                    //contains current position of thumb in view as bounds
                    RectF bounds = new RectF(thumb.getBounds());
                    thumbPressed = bounds.contains(event.getX(), event.getY());
                    if (thumbPressed) {
                        Log.d("Thumb", "pressed");
                        initTouchX = event.getX();
                        return true;
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                if (thumbPressed) {
                    Log.d("Thumb", "was pressed -- listener call");
                    thumbPressed = false;
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (thumbPressed) {
                    if (Math.abs(initTouchX - event.getX()) > scaledTouchSlop) {
                        initTouchX = 0;
                        thumbPressed = false;
                        return super.onTouchEvent(event);
                    }
                    Log.d("Thumb", "move blocked");
                    return true;
                }
                break;
        }

        return super.onTouchEvent(event);
    }
}

Upvotes: 3

Related Questions