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
.