PhotoView icon indicating copy to clipboard operation
PhotoView copied to clipboard

OnPhotoTapListener not called when setZoomable(false)

Open AndrewRogers1994 opened this issue 5 years ago • 1 comments

I'm using the PhotoView to display a camera stream which I do not want to be zoomable by the user.

I have the following code:

imageView = findViewById(R.id.overlayimageview);
imageView.setZoomable(false);

imageView.setOnPhotoTapListener(new OnPhotoTapListener()
{
     @Override
     public void onPhotoTap(ImageView view, float x, float y)
      {
      }
}

However the onPhotoTap is never called when zoomable is set to false.

Any suggestions or work arounds?

AndrewRogers1994 avatar Feb 19 '20 12:02 AndrewRogers1994

Yeap, same problem. Thats because of line 335 in PhotoViewAttacher class:

@Override
public boolean onTouch(View v, MotionEvent ev) {
    boolean handled = false;
    if (mZoomEnabled && Util.hasDrawable((ImageView) v)) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                ViewParent parent = v.getParent();
                // First, disable the Parent from intercepting the touch
                // event
                if (parent != null) {
                    parent.requestDisallowInterceptTouchEvent(true);
                }
                // If we're flinging, and the user presses down, cancel
                // fling
                cancelFling();
                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() < mMinScale) {
                    RectF rect = getDisplayRect();
                    if (rect != null) {
                        v.post(new AnimatedZoomRunnable(getScale(), mMinScale,
                            rect.centerX(), rect.centerY()));
                        handled = true;
                    }
                } else if (getScale() > mMaxScale) {
                    RectF rect = getDisplayRect();
                    if (rect != null) {
                        v.post(new AnimatedZoomRunnable(getScale(), mMaxScale,
                            rect.centerX(), rect.centerY()));
                        handled = true;
                    }
                }
                break;
        }
        // Try the Scale/Drag detector
        if (mScaleDragDetector != null) {
            boolean wasScaling = mScaleDragDetector.isScaling();
            boolean wasDragging = mScaleDragDetector.isDragging();
            handled = mScaleDragDetector.onTouchEvent(ev);
            boolean didntScale = !wasScaling && !mScaleDragDetector.isScaling();
            boolean didntDrag = !wasDragging && !mScaleDragDetector.isDragging();
            mBlockParentIntercept = didntScale && didntDrag;
        }
        // Check to see if the user double tapped
        if (mGestureDetector != null && mGestureDetector.onTouchEvent(ev)) {
            handled = true;
        }

    }
    return handled;
}

This line make pain: if (mZoomEnabled && Util.hasDrawable((ImageView) v))

yandroidUA avatar Aug 01 '20 08:08 yandroidUA