Skip to content

How to dismiss PopupWindow by swipe to top while using ZoomageView inside it? #107

@Gkemon

Description

@Gkemon

COPIED FROM MY ORIGINAL StackOverflow QUESTION

I'm using the ZoomageView library in PopupWindows to show an image with zoomable capacity. But the problem is that I want to dismiss it by a swipe to the top but can't because ZoomageView has its own ScaleGestureDetector. I added my own custom touchListener to detect top swipe by the following approach -

 zoomageView.setOnTouchListener(new OnSwipeTouchListener(zoomageView.getContext()){
                        public void onSwipeTop() {
                            pw.dismiss()
                        }
                    });
class OnSwipeTouchListener implements View.OnTouchListener {
        private final GestureDetector gestureDetector;

        public OnSwipeTouchListener(Context ctx) {
            gestureDetector = new GestureDetector(ctx, new GestureListener());
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }

    private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 200;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffY < 0) {
                        onSwipeTop();
                    } 
                    result = true;
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }
    public void onSwipeTop() {
    }

But it conflicts with ZoomageView's zooming attitude because while the image is being zoomed then if the user swipe to top for moving the image (because when the image is zoomed then the user may move the image in any directions) then onSwipeTop is called which dismiss the popup.

I just want to dismiss popup while the image is not zoomed and while the image is zoomed then ignore the onSwipeTop.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions