/**
   * Closes the drawer with an animation.
   *
   * @see #close()
   * @see #open()
   * @see #animateOpen()
   * @see #animateToggle()
   * @see #toggle()
   */
  public void animateClose() {
    prepareContent();
    final OnDrawerScrollListener scrollListener = mOnDrawerScrollListener;
    if (scrollListener != null) {
      scrollListener.onScrollStarted();
    }
    animateClose(mVertical ? mHandle.getTop() : mHandle.getLeft());

    if (scrollListener != null) {
      scrollListener.onScrollEnded();
    }
  }
  /**
   * Opens the drawer with an animation.
   *
   * @see #close()
   * @see #open()
   * @see #animateClose()
   * @see #animateToggle()
   * @see #toggle()
   */
  public void animateOpen() {
    prepareContent();
    final OnDrawerScrollListener scrollListener = mOnDrawerScrollListener;
    if (scrollListener != null) {
      scrollListener.onScrollStarted();
    }
    animateOpen(mVertical ? mHandle.getTop() : mHandle.getLeft());

    sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);

    if (scrollListener != null) {
      scrollListener.onScrollEnded();
    }
  }
  private void stopTracking() {
    mHandle.setPressed(false);
    mTracking = false;

    if (mOnDrawerScrollListener != null) {
      mOnDrawerScrollListener.onScrollEnded();
    }

    if (mVelocityTracker != null) {
      mVelocityTracker.recycle();
      mVelocityTracker = null;
    }
  }
  @Override
  public boolean onInterceptTouchEvent(MotionEvent event) {
    if (mLocked) {
      return false;
    }

    final int action = event.getAction();

    float x = event.getX();
    float y = event.getY();

    final Rect frame = mFrame;
    final View handle = mHandle;

    handle.getHitRect(frame);
    if (!mTracking && !frame.contains((int) x, (int) y)) {
      return false;
    }

    if (action == MotionEvent.ACTION_DOWN) {
      mTracking = true;

      handle.setPressed(true);
      // Must be called before prepareTracking()
      prepareContent();

      // Must be called after prepareContent()
      if (mOnDrawerScrollListener != null) {
        mOnDrawerScrollListener.onScrollStarted();
      }

      if (mVertical) {
        final int top = mHandle.getTop();
        mTouchDelta = (int) y - top;
        prepareTracking(top);
      } else {
        final int left = mHandle.getLeft();
        mTouchDelta = (int) x - left;
        prepareTracking(left);
      }
      mVelocityTracker.addMovement(event);
    }

    return true;
  }