code: @SuppressWarnings("all")
  	@SuppressLint("ClickableViewAccessibility")
  	@Override
  	public boolean onTouchEvent(MotionEvent event) {
  		super.onTouchEvent(event);
  		TouchPoint point = new TouchPoint(event.getX(), event.getY());
  		boolean touchPointInsideCircle = point.isInsideCircle(calculateCenterX(), calculateCenterY(),
  				calculateCircleRadius());
  		int action = event.getAction();
  		switch (action) {
  			case MotionEvent.ACTION_DOWN:
  				if (touchPointInsideCircle) {
  					setState(State.PRESSED);
  					setTouchPoint(point);
  					LOGGER.trace("Detected the ACTION_DOWN motion event");
  					return true;
  				}
  				break;
  			case MotionEvent.ACTION_UP:
  				if (touchPointInsideCircle) {
  					setState(State.NORMAL);
  					getTouchPoint().reset();
  					LOGGER.trace("Detected the ACTION_UP motion event");
  					return true;
  				}
  				break;
  			case MotionEvent.ACTION_MOVE:
  				if (!touchPointInsideCircle
  						&& getState() == State.PRESSED) {
  					setState(State.NORMAL);
  					getTouchPoint().reset();
  					LOGGER.trace("Detected the ACTION_MOVE motion event");
  					return true;
  				}
  				break;
  			default:
  				LOGGER.warn("Detected unrecognized motion event");
  				break;
  		}
  		return false;
  	}
docs: Adds additional actions on motion events:
  1. Changes the <b>Action Button</b> {@link #state} to {@link State#PRESSED}
  on {@link android.view.MotionEvent#ACTION_DOWN}
  2. Changes the <b>Action Button</b> {@link #state} to {@link State#NORMAL}
  on {@link android.view.MotionEvent#ACTION_UP}
  3. Changes the <b>Action Button</b> {@link #state} to {@link State#NORMAL}
  on {@link android.view.MotionEvent#ACTION_MOVE} in case when touch point
  leaves the main circle
  
  @param event motion event
  @return true if event was handled, otherwise false