@Override
  public boolean onTouchEvent(MotionEvent ev) {
    if ((mViewPager == null) || (mViewPager.getAdapter().getCount() == 0)) {
      return false;
    }

    final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;
    switch (action) {
      case MotionEvent.ACTION_CANCEL:
      case MotionEvent.ACTION_UP:
        if (!mIsDragging) {
          final int count = mViewPager.getAdapter().getCount();
          final int width = getWidth();
          final float halfWidth = width / 2f;
          final float sixthWidth = width / 6f;

          if ((mCurrentPage > 0) && (ev.getX() < halfWidth - sixthWidth)) {
            if (action != MotionEvent.ACTION_CANCEL) {
              mViewPager.setCurrentItem(mCurrentPage - 1);
            }
            return true;
          } else if ((mCurrentPage < count - 1) && (ev.getX() > halfWidth + sixthWidth)) {
            if (action != MotionEvent.ACTION_CANCEL) {
              mViewPager.setCurrentItem(mCurrentPage + 1);
            }
            return true;
          }
        }

        mIsDragging = false;
        mActivePointerId = INVALID_POINTER;
        if (mViewPager.isFakeDragging()) mViewPager.endFakeDrag();
        return true;

      default:
        super.onTouchEvent(ev);
        return false;
    }
  }
  public boolean onTouchEvent(android.view.MotionEvent ev) {
    if ((mViewPager == null) || (mViewPager.getAdapter().getCount() == 0)) {
      return false;
    }

    final int action = ev.getAction();

    switch (action & MotionEventCompat.ACTION_MASK) {
      case MotionEvent.ACTION_DOWN:
        mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
        mLastMotionX = ev.getX();
        break;

      case MotionEvent.ACTION_MOVE:
        {
          final int activePointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
          final float x = MotionEventCompat.getX(ev, activePointerIndex);
          final float deltaX = x - mLastMotionX;

          if (!mIsDragging) {
            if (Math.abs(deltaX) > mTouchSlop) {
              mIsDragging = true;
            }
          }

          if (mIsDragging) {
            if (!mViewPager.isFakeDragging()) {
              mViewPager.beginFakeDrag();
            }

            mLastMotionX = x;

            mViewPager.fakeDragBy(deltaX);
          }

          break;
        }

      case MotionEvent.ACTION_CANCEL:
      case MotionEvent.ACTION_UP:
        if (!mIsDragging) {
          final int count = mViewPager.getAdapter().getCount();
          final int width = getWidth();
          final float halfWidth = width / 2f;
          final float sixthWidth = width / 6f;

          if ((mCurrentPage > 0) && (ev.getX() < halfWidth - sixthWidth)) {
            mViewPager.setCurrentItem(mCurrentPage - 1);
            return true;
          } else if ((mCurrentPage < count - 1) && (ev.getX() > halfWidth + sixthWidth)) {
            mViewPager.setCurrentItem(mCurrentPage + 1);
            return true;
          }
        }

        mIsDragging = false;
        mActivePointerId = INVALID_POINTER;
        if (mViewPager.isFakeDragging()) mViewPager.endFakeDrag();
        break;

      case MotionEventCompat.ACTION_POINTER_DOWN:
        {
          final int index = MotionEventCompat.getActionIndex(ev);
          final float x = MotionEventCompat.getX(ev, index);
          mLastMotionX = x;
          mActivePointerId = MotionEventCompat.getPointerId(ev, index);
          break;
        }

      case MotionEventCompat.ACTION_POINTER_UP:
        final int pointerIndex = MotionEventCompat.getActionIndex(ev);
        final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex);
        if (pointerId == mActivePointerId) {
          final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
          mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex);
        }
        mLastMotionX =
            MotionEventCompat.getX(ev, MotionEventCompat.findPointerIndex(ev, mActivePointerId));
        break;
    }

    return true;
  };
  @Override
  public boolean onTouchEvent(android.view.MotionEvent ev) {
    if (super.onTouchEvent(ev)) return true;
    if ((mViewPager == null) || (mViewPager.getAdapter().getCount() == 0)) return false;

    final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;
    switch (action) {
      case MotionEvent.ACTION_DOWN:
        mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
        mLastMotionX = ev.getX();
        break;

      case MotionEvent.ACTION_MOVE:
        {
          final int activePointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
          final float x = MotionEventCompat.getX(ev, activePointerIndex);
          final float deltaX = x - mLastMotionX;

          if (!mIsDragging) {
            if (Math.abs(deltaX) > mTouchSlop) {
              mIsDragging = true;
            }
          }

          if (mIsDragging) {
            mLastMotionX = x;
            if (mViewPager.isFakeDragging() || mViewPager.beginFakeDrag()) {
              mViewPager.fakeDragBy(deltaX);
            }
          }

          break;
        }

      case MotionEvent.ACTION_CANCEL:
      case MotionEvent.ACTION_UP:
        if (!mIsDragging) {
          final int count = mViewPager.getAdapter().getCount();
          final int width = getWidth();
          final float halfWidth = width / 2f;
          final float sixthWidth = width / 6f;
          final float leftThird = halfWidth - sixthWidth;
          final float rightThird = halfWidth + sixthWidth;
          final float eventX = ev.getX();

          if (eventX < leftThird) {
            if (mCurrentPage > 0) {
              if (action != MotionEvent.ACTION_CANCEL) {
                mViewPager.setCurrentItem(mCurrentPage - 1);
              }
              return true;
            }
          } else if (eventX > rightThird) {
            if (mCurrentPage < count - 1) {
              if (action != MotionEvent.ACTION_CANCEL) {
                mViewPager.setCurrentItem(mCurrentPage + 1);
              }
              return true;
            }
          } else {
            // Middle third
            if (mCenterItemClickListener != null && action != MotionEvent.ACTION_CANCEL) {
              mCenterItemClickListener.onCenterItemClick(mCurrentPage);
            }
          }
        }

        mIsDragging = false;
        mActivePointerId = INVALID_POINTER;
        if (mViewPager.isFakeDragging()) {
          mViewPager.endFakeDrag();
        }
        break;

      case MotionEventCompat.ACTION_POINTER_DOWN:
        {
          final int index = MotionEventCompat.getActionIndex(ev);
          mLastMotionX = MotionEventCompat.getX(ev, index);
          mActivePointerId = MotionEventCompat.getPointerId(ev, index);
          break;
        }

      case MotionEventCompat.ACTION_POINTER_UP:
        final int pointerIndex = MotionEventCompat.getActionIndex(ev);
        final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex);
        if (pointerId == mActivePointerId) {
          final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
          mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex);
        }
        mLastMotionX =
            MotionEventCompat.getX(ev, MotionEventCompat.findPointerIndex(ev, mActivePointerId));
        break;
    }

    return true;
  }
 public boolean onTouchEvent(MotionEvent paramMotionEvent) {
   int i1 = 0;
   if (super.onTouchEvent(paramMotionEvent)) {}
   label317:
   do {
     do {
       float f1;
       float f2;
       do {
         do {
           do {
             return true;
             if ((f == null) || (f.getAdapter().getCount() == 0)) {
               return false;
             }
             i2 = paramMotionEvent.getAction() & 0xFF;
             switch (i2) {
               case 4:
               default:
                 return true;
               case 0:
                 a = MotionEventCompat.getPointerId(paramMotionEvent, 0);
                 p = paramMotionEvent.getX();
                 return true;
               case 2:
                 f1 =
                     MotionEventCompat.getX(
                         paramMotionEvent,
                         MotionEventCompat.findPointerIndex(paramMotionEvent, a));
                 f2 = f1 - p;
                 if ((!q) && (Math.abs(f2) > o)) {
                   q = true;
                 }
                 break;
             }
           } while (!q);
           p = f1;
         } while ((!f.isFakeDragging()) && (!f.beginFakeDrag()));
         f.fakeDragBy(f2);
         return true;
         if (q) {
           break label317;
         }
         i1 = f.getAdapter().getCount();
         int i3 = getWidth();
         f1 = i3 / 2.0F;
         f2 = i3 / 6.0F;
         if ((h <= 0) || (paramMotionEvent.getX() >= f1 - f2)) {
           break;
         }
       } while (i2 == 3);
       f.setCurrentItem(h - 1);
       return true;
       if ((h >= i1 - 1) || (paramMotionEvent.getX() <= f2 + f1)) {
         break;
       }
     } while (i2 == 3);
     f.setCurrentItem(h + 1);
     return true;
     q = false;
     a = -1;
   } while (!f.isFakeDragging());
   f.endFakeDrag();
   return true;
   i1 = MotionEventCompat.getActionIndex(paramMotionEvent);
   p = MotionEventCompat.getX(paramMotionEvent, i1);
   a = MotionEventCompat.getPointerId(paramMotionEvent, i1);
   return true;
   int i2 = MotionEventCompat.getActionIndex(paramMotionEvent);
   if (MotionEventCompat.getPointerId(paramMotionEvent, i2) == a) {
     if (i2 == 0) {
       i1 = 1;
     }
     a = MotionEventCompat.getPointerId(paramMotionEvent, i1);
   }
   p =
       MotionEventCompat.getX(
           paramMotionEvent, MotionEventCompat.findPointerIndex(paramMotionEvent, a));
   return true;
 }