Skip to content

Instantly share code, notes, and snippets.

@sigmadeltasoftware
Created February 2, 2017 23:09
Show Gist options
  • Save sigmadeltasoftware/18b52b47ebc00245f4444731176e91c4 to your computer and use it in GitHub Desktop.
Save sigmadeltasoftware/18b52b47ebc00245f4444731176e91c4 to your computer and use it in GitHub Desktop.
Final implementation for DoubleTapSeekBar
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