@Override
  public final boolean onTouch(View v, MotionEvent ev) {
    boolean handled = false;

    if (isZoomEnabled) {
      switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
          // First, disable the Parent from intercepting the touch
          // event
          if (v.getParent() != null) {
            v.getParent().requestDisallowInterceptTouchEvent(true);
          }

          // If we're flinging, and the user presses down, cancel
          // fling
          if (currentFlingRunnable != null) {
            currentFlingRunnable.cancelFling();
            currentFlingRunnable = null;
          }
          break;

        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
          // If the user has zoomed less than min scale, zoom back
          // to min scale
          if (getScale() < minScale) {
            RectF rect = getDisplayRect();
            if (null != rect) {
              v.post(
                  new AnimatedZoomRunnable(getScale(), minScale, rect.centerX(), rect.centerY()));
              handled = true;
            }
          }
          break;
      }

      // Finally, try the scale/drag/tap detector
      if ((multiGestureDetector != null) && multiGestureDetector.onTouchEvent(ev)) {
        handled = true;
      }
    }

    return handled;
  }
Пример #2
0
 private void cancelFling() {
   if (null != mCurrentFlingRunnable) {
     mCurrentFlingRunnable.cancelFling();
     mCurrentFlingRunnable = null;
   }
 }
Пример #3
0
 private void cancelFling() {
   if (mCurrentFlingRunnable != null) {
     mCurrentFlingRunnable.cancelFling();
     mCurrentFlingRunnable = null;
   }
 }