@Override
  public boolean onTouchEvent(MotionEvent event) {
    if (!isEnabled() || getViewAdapter() == null) {
      return true;
    }

    switch (event.getAction()) {
      case MotionEvent.ACTION_MOVE:
        if (getParent() != null) {
          getParent().requestDisallowInterceptTouchEvent(true);
        }
        break;

      case MotionEvent.ACTION_UP:
        if (!mIsScrollingPerformed) {
          int distance = (int) getMotionEventPosition(event) - getBaseDimension() / 2;
          if (distance > 0) {
            distance += getItemDimension() / 2;
          } else {
            distance -= getItemDimension() / 2;
          }
          int items = distance / getItemDimension();
          if (items != 0 && isValidItemIndex(mCurrentItemIdx + items)) {
            notifyClickListenersAboutClick(mCurrentItemIdx + items);
          }
        }
        break;
    }
    return mScroller.onTouchEvent(event);
  }