package org.goodev.discourse.photos; import android.content.Context; import android.graphics.Bitmap; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.net.Uri; import android.util.AttributeSet; import com.android.volley.toolbox.NetworkImageView; import uk.co.senab.photoview.IPhotoView; import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener; import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener; import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener; public class NetworkPhotoView extends NetworkImageView implements IPhotoView { private final PhotoViewAttacher mAttacher; private ScaleType mPendingScaleType; private OnSetImageBitmap mOnSetImageBitmap; public NetworkPhotoView(Context context) { this(context, null); } public NetworkPhotoView(Context context, AttributeSet attr) { this(context, attr, 0); } public NetworkPhotoView(Context context, AttributeSet attr, int defStyle) { super(context, attr, defStyle); super.setScaleType(ScaleType.MATRIX); mAttacher = new PhotoViewAttacher(this); if (null != mPendingScaleType) { setScaleType(mPendingScaleType); mPendingScaleType = null; } } @Override public boolean canZoom() { return mAttacher.canZoom(); } @Override public RectF getDisplayRect() { return mAttacher.getDisplayRect(); } @Override public float getMinScale() { return mAttacher.getMinScale(); } @Override public void setMinScale(float minScale) { mAttacher.setMinScale(minScale); } @Override public float getMidScale() { return mAttacher.getMidScale(); } @Override public void setMidScale(float midScale) { mAttacher.setMidScale(midScale); } @Override public float getMaxScale() { return mAttacher.getMaxScale(); } @Override public void setMaxScale(float maxScale) { mAttacher.setMaxScale(maxScale); } @Override public float getScale() { return mAttacher.getScale(); } @Override public ScaleType getScaleType() { return mAttacher.getScaleType(); } @Override public void setScaleType(ScaleType scaleType) { if (null != mAttacher) { mAttacher.setScaleType(scaleType); } else { mPendingScaleType = scaleType; } } @Override public void setAllowParentInterceptOnEdge(boolean allow) { mAttacher.setAllowParentInterceptOnEdge(allow); } public void setOnSetImageBitmap(OnSetImageBitmap listener) { mOnSetImageBitmap = listener; } @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); if (mOnSetImageBitmap != null && bm != null) { mOnSetImageBitmap.onImageBitmap(bm.getWidth(), bm.getHeight()); } } @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) { mAttacher.setOnMatrixChangeListener(listener); } @Override public void setOnLongClickListener(OnLongClickListener l) { mAttacher.setOnLongClickListener(l); } @Override public void setOnPhotoTapListener(OnPhotoTapListener listener) { mAttacher.setOnPhotoTapListener(listener); } @Override public void setOnViewTapListener(OnViewTapListener listener) { mAttacher.setOnViewTapListener(listener); } @Override public void setZoomable(boolean zoomable) { mAttacher.setZoomable(zoomable); } @Override public void zoomTo(float scale, float focalX, float focalY) { mAttacher.zoomTo(scale, focalX, focalY); } @Override protected void onDetachedFromWindow() { mAttacher.cleanup(); super.onDetachedFromWindow(); } public interface OnSetImageBitmap { void onImageBitmap(int width, int height); } }