Search code examples
javaandroidkotlinzoominguigesturerecognizer

Android: Use GestureDetector and Zoomy at the same time


I use a GestureListener on an image to detect a Double Tap.

            holder.image.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    return holder.myDoubleTapDetector.onTouchEvent(event);
                }
            });

And I use the library Zoomy to make the images zoomable.

            Zoomy.Builder builder = new Zoomy.Builder(mActivity).target(holder.image);
            builder.register();

Both work perfectly fine for them alone.

But adding both at the same time does not work! Only the one that was added last works.

How can I have both of them working?


Solution

  • Zoomy provides a solution for that:

    Because Zoomy works by attaching a View.OnTouchListener to the registered View, View.OnClickListener can not be set along with Zoomy, so a TapListener, LongPressListener and DoubleTapListener are provided to ensure the View still can listen for gestures. A ZoomListener is also provided if you are interested in zoom events.

    In Code:

    Zoomy.Builder builder = new Zoomy.Builder(this)
                        .target(mZoomableView)
                        .tapListener(new TapListener() {
                            @Override
                            public void onTap(View v) {
                                //View tapped, do stuff
                            }
                        })
                         .longPressListener(new LongPressListener() {
                            @Override
                            public void onLongPress(View v) {
                                //View long pressed, do stuff
                            }
                        }).doubleTapListener(new DoubleTapListener() {
                            @Override
                            public void onDoubleTap(View v) {
                                //View double tapped, do stuff
                            }
                        })
                        .zoomListener(new ZoomListener() {
                            @Override
                            public void onViewStartedZooming(View view) {
                                //View started zooming
                            }
    
                            @Override
                            public void onViewEndedZooming(View view) {
                                //View ended zooming
                            }
                        });