@Override
  public void onGlobalLayout() {
    ImageView imageView = getImageView();

    if (null != imageView) {
      if (mZoomEnabled) {
        final int top = imageView.getTop();
        final int right = imageView.getRight();
        final int bottom = imageView.getBottom();
        final int left = imageView.getLeft();

        /**
         * We need to check whether the ImageView's bounds have changed. This would be easier if we
         * targeted API 11+ as we could just use View.OnLayoutChangeListener. Instead we have to
         * replicate the work, keeping track of the ImageView's bounds and then checking if the
         * values change.
         */
        if (top != mIvTop || bottom != mIvBottom || left != mIvLeft || right != mIvRight) {
          // Update our base matrix, as the bounds have changed
          updateBaseMatrix(imageView.getDrawable());

          // Update values as something has changed
          mIvTop = top;
          mIvRight = right;
          mIvBottom = bottom;
          mIvLeft = left;
        }
      } else {
        updateBaseMatrix(imageView.getDrawable());
      }
    }
  }
  public void update() {
    ImageView imageView = getImageView();

    if (null != imageView) {
      if (mZoomEnabled) {
        // Make sure we using MATRIX Scale Type
        setImageViewScaleTypeMatrix(imageView);

        // Update the base matrix using the current drawable
        updateBaseMatrix(imageView.getDrawable());
      } else {
        // Reset the Matrix...
        resetMatrix();
      }
    }
  }