@Override
 public boolean onTouchEvent(MotionEvent ev) {
   // Intercept ListView's touch event
   if (mScroller != null && mScroller.onTouchEvent(ev)) {
     return true;
   }
   if (mGestureDetector == null) {
     // Create a new GestureDetector -- 手势探测器
     mGestureDetector =
         new GestureDetector(
             getContext(),
             new GestureDetector.SimpleOnGestureListener() {
               @Override
               public boolean onFling(
                   MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                 if (mScroller != null) {
                   mScroller.show();
                 }
                 return super.onFling(e1, e2, velocityX, velocityY);
               }
             });
   }
   mGestureDetector.onTouchEvent(ev);
   return super.onTouchEvent(ev);
 }
  @Override
  public boolean onTouchEvent(MotionEvent ev) {
    // Intercept ListView's touch event
    if (mScroller != null && mScroller.onTouchEvent(ev)) return true;

    if (mGestureDetector == null) {
      mGestureDetector =
          new GestureDetector(
              getContext(),
              new GestureDetector.SimpleOnGestureListener() {

                @Override
                public boolean onFling(
                    MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                  // If fling happens, index bar shows
                  if (mScroller != null) mScroller.show();
                  return super.onFling(e1, e2, velocityX, velocityY);
                }
              });
    }
    mGestureDetector.onTouchEvent(ev);

    return super.onTouchEvent(ev);
  }