// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public static interface OnMatrixChangedListener {
//     /**
//      * Callback for when the Matrix displaying the Drawable has changed. This could be because
//      * the View's bounds have changed, or the user has zoomed.
//      *
//      * @param rect - Rectangle displaying the Drawable's new bounds.
//      */
//     void onMatrixChanged(RectF rect);
// }
// 
// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public static interface OnPhotoTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a photo. You will only receive a callback if
//      * the user taps on the actual photo, tapping on 'whitespace' will be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x    - where the user tapped from the of the Drawable, as percentage of the
//      *             Drawable width.
//      * @param y    - where the user tapped from the top of the Drawable, as percentage of the
//      *             Drawable height.
//      */
//     void onPhotoTap(View view, float x, float y);
// }
// 
// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public static interface OnViewTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a ImageView. You will receive a callback if
//      * the user taps anywhere on the view, tapping on 'whitespace' will not be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x    - where the user tapped from the left of the View.
//      * @param y    - where the user tapped from the top of the View.
//      */
//     void onViewTap(View view, float x, float y);
// }


import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.widget.ImageView;
    public void setMaximumScale(float maximumScale) {
        mAttacher.setMaximumScale(maximumScale);
    }

    @Override
    // setImageBitmap calls through to this method
    public void setImageDrawable(Drawable drawable) {
        super.setImageDrawable(drawable);
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    public void setImageResource(int resId) {
        super.setImageResource(resId);
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    public void setImageURI(Uri uri) {
        super.setImageURI(uri);
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public static interface OnMatrixChangedListener {
//     /**
//      * Callback for when the Matrix displaying the Drawable has changed. This could be because
//      * the View's bounds have changed, or the user has zoomed.
//      *
//      * @param rect - Rectangle displaying the Drawable's new bounds.
//      */
//     void onMatrixChanged(RectF rect);
// }
// 
// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public static interface OnPhotoTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a photo. You will only receive a callback if
//      * the user taps on the actual photo, tapping on 'whitespace' will be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x    - where the user tapped from the of the Drawable, as percentage of the
//      *             Drawable width.
//      * @param y    - where the user tapped from the top of the Drawable, as percentage of the
//      *             Drawable height.
//      */
//     void onPhotoTap(View view, float x, float y);
// }
// 
// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public static interface OnViewTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a ImageView. You will receive a callback if
//      * the user taps anywhere on the view, tapping on 'whitespace' will not be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x    - where the user tapped from the left of the View.
//      * @param y    - where the user tapped from the top of the View.
//      */
//     void onViewTap(View view, float x, float y);
// }


// Path: library-lis/src/main/java/uk/co/senab/photoview/PhotoView.java
import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.widget.ImageView;

    public void setMaximumScale(float maximumScale) {
        mAttacher.setMaximumScale(maximumScale);
    }

    @Override
    // setImageBitmap calls through to this method
    public void setImageDrawable(Drawable drawable) {
        super.setImageDrawable(drawable);
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    public void setImageResource(int resId) {
        super.setImageResource(resId);
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    public void setImageURI(Uri uri) {
        super.setImageURI(uri);
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    public void setOnMatrixChangeListener(OnMatrixChangedListener listener) {