/** Called when a drawer animation has successfully completed. */
 private void completeAnimation() {
   mScroller.abortAnimation();
   final int finalX = mScroller.getFinalX();
   setOffsetPixels(finalX);
   setDrawerState(finalX == 0 ? STATE_CLOSED : STATE_OPEN);
   stopLayerTranslation();
 }
  /** Callback when each frame in the drawer animation should be drawn. */
  private void postAnimationInvalidate() {
    if (mScroller.computeScrollOffset(false)) {
      final int oldX = (int) mOffsetPixels;
      final int x = mScroller.getCurrX();

      if (x != oldX) setOffsetPixels(x);
      if (x != mScroller.getFinalX()) {
        postOnAnimation(mDragRunnable);
        return;
      }
    }

    completeAnimation();
  }