Created
February 2, 2017 23:09
-
-
Save sigmadeltasoftware/18b52b47ebc00245f4444731176e91c4 to your computer and use it in GitHub Desktop.
Final implementation for DoubleTapSeekBar
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sigmadelta.verticaldoubletapseekbar; | |
import android.content.Context; | |
import android.support.v4.view.GestureDetectorCompat; | |
import android.util.AttributeSet; | |
import android.view.GestureDetector; | |
import android.view.MotionEvent; | |
import android.widget.SeekBar; | |
import java.util.Timer; | |
import java.util.TimerTask; | |
public class DoubleTapSeekBar extends SeekBar { | |
private GestureDetectorCompat _detector; | |
private DoubleTapSeekBarEvent _doubleTapEvent; | |
private Timer _timer = new Timer(); | |
private boolean _gesturesEnabled = true; | |
private int _debounceTimeMs = 200; | |
public DoubleTapSeekBar(Context context) { | |
super(context); | |
_detector = new GestureDetectorCompat(context, new DoubleTapGestureListener(this)); | |
} | |
public DoubleTapSeekBar(Context context, AttributeSet attrs) { | |
super(context, attrs); | |
_detector = new GestureDetectorCompat(context, new DoubleTapGestureListener(this)); | |
} | |
public DoubleTapSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { | |
super(context, attrs, defStyleAttr); | |
_detector = new GestureDetectorCompat(context, new DoubleTapGestureListener(this)); | |
} | |
public DoubleTapSeekBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { | |
super(context, attrs, defStyleAttr, defStyleRes); | |
_detector = new GestureDetectorCompat(context, new DoubleTapGestureListener(this)); | |
} | |
@Override | |
public boolean onTouchEvent(MotionEvent e) { | |
if (_gesturesEnabled) { | |
_detector.onTouchEvent(e); | |
return super.onTouchEvent(e); | |
} else { | |
return false; | |
} | |
} | |
public void setDoubleTapEvent(DoubleTapSeekBarEvent event) { | |
_doubleTapEvent = event; | |
} | |
public void setDebounceTimeInMs(int debounceTimeMs) { | |
_debounceTimeMs = debounceTimeMs; | |
} | |
private class ReenableTouchEventsTask extends TimerTask { | |
@Override | |
public void run() { | |
_gesturesEnabled = true; | |
} | |
} | |
private class DoubleTapGestureListener extends | |
GestureDetector.SimpleOnGestureListener { | |
private DoubleTapSeekBar _seekBar; | |
DoubleTapGestureListener(DoubleTapSeekBar seekBar) { | |
_seekBar = seekBar; | |
} | |
@Override | |
public boolean onDoubleTap(MotionEvent event) { | |
_doubleTapEvent.onDoubleTap(_seekBar); | |
_gesturesEnabled = false; | |
_timer.schedule(new ReenableTouchEventsTask(), _debounceTimeMs); | |
return true; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment