/** Handles thumb selection and movement. Notifies listener callback on certain events. */
 @Override
 public boolean onTouchEvent(MotionEvent event) {
   switch (event.getAction()) {
     case MotionEvent.ACTION_DOWN:
       pressedThumb = evalPressedThumb(event.getX());
       invalidate();
       break;
     case MotionEvent.ACTION_MOVE:
       if (pressedThumb != null) {
         if (Thumb.MIN.equals(pressedThumb)) {
           setNormalizedMinValue(screenToNormalized(event.getX()));
         } else if (Thumb.MAX.equals(pressedThumb)) {
           setNormalizedMaxValue(screenToNormalized(event.getX()));
         }
         if (notifyWhileDragging && listener != null) {
           listener.rangeSeekBarValuesChanged(getSelectedMinValue(), getSelectedMaxValue());
         }
       }
       break;
     case MotionEvent.ACTION_UP:
     case MotionEvent.ACTION_CANCEL:
       pressedThumb = null;
       invalidate();
       if (listener != null) {
         listener.rangeSeekBarValuesChanged(getSelectedMinValue(), getSelectedMaxValue());
       }
       break;
   }
   return true;
 }