code: public int onTouchEvent(final MotionEvent event) {
          int status = -2;
          if (visibility != View.GONE) {
              final int action = event.getAction();
  
              final boolean isEventInCenterCircle = isInCenterCircle(event.getX(), event.getY());
              if (action == MotionEvent.ACTION_DOWN) {
                  // check if center
                  if (isEventInCenterCircle) {
                      updateDrawableState(VIEW_STATE_PRESSED, true);
                      status = MotionEvent.ACTION_DOWN;
                  }
              } else if (action == MotionEvent.ACTION_UP) {
                  final boolean isPressed = (mCombinedState & VIEW_STATE_PRESSED) != 0;
                  if (isPressed && isEventInCenterCircle) {
                      updateDrawableState(VIEW_STATE_PRESSED, false);
                      status = MotionEvent.ACTION_UP;
                  }
  
              } else if (action == MotionEvent.ACTION_MOVE) {
                  if (!isEventInCenterCircle) {
                      updateDrawableState(VIEW_STATE_PRESSED, false);
                  }
              }
          }
          return status;
      }
docs: Act on a touch event. Returns a status based on what action was taken.
  
  @param event The motion event that was just received.
  @return Return a negative number if the event wasn't handled. Return a MotionEvent action code if it was handled.