You must first be able to listen to image scaling. ImageViewTouch does not support this function (for example, gesture-imageview supports it), so you must implement it yourself.
Modify ImageViewTouch.java as follows:
public class ImageViewTouch extends ImageViewTouchBase { ... private OnPageScaleListener externalScaleListener; public void setOnScaleListener(OnPageScaleListener onScaleListener) { this.externalScaleListener = onScaleListener; } public interface OnPageScaleListener { void onScaleBegin(); void onScaleEnd(float scale); } @Override protected void onZoom(float scale) { super.onZoom(scale); if (!mScaleDetector.isInProgress()) { mCurrentScaleFactor = scale; externalScaleListener.onScaleEnd(scale); } } public class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScaleBegin(ScaleGestureDetector detector) { externalScaleListener.onScaleBegin(); return super.onScaleBegin(detector); } ... @Override public void onScaleEnd(ScaleGestureDetector detector) { externalScaleListener.onScaleEnd(mCurrentScaleFactor); } } ... }
Then use the following ViewPager implementation in your application:
import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; public class DeactivableViewPager extends ViewPager { private boolean activated = true; public DeactivableViewPager(Context context) { super(context); } public DeactivableViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public void activate() { activated = true; } public void deactivate() { activated = false; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { if (activated) { try { return super.onInterceptTouchEvent(event); } catch (Exception e) {
Then, in your ViewPager adapter, you must install the following zoom receiver for your ImageViewTouch:
ImageViewTouch imageView = ...; imageView.setOnScaleListener(new OnPageScaleListener() { @Override public void onScaleBegin() { viewPager.deactivate(); } @Override public void onScaleEnd(float scale) { if (scale > 1.0) { viewPager.deactivate(); } else { viewPager.activate(); } } }); imageLoader.displayImage(url, imageView, ...);
And do not forget to set large values ββfor maxImage***ForMemoryCache in the ImageLoader configuration, so the UIL will not reduce the original images when decoding to bitmaps:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) ... .memoryCacheExtraOptions(3000, 3000) ... .build();
source share