From f5fe8bfc83794dc49e0180e549516454cf6748e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=CC=81lvaro=20Blanco=20Cabrero?= Date: Sat, 4 Aug 2018 00:33:14 +0200 Subject: [PATCH] Double tap #11 How can i add onLongPress Listener #12 --- .../com/ablanco/zoomysample/MainActivity.java | 16 +++++ .../com/ablanco/zoomy/DoubleTapListener.java | 11 ++++ .../com/ablanco/zoomy/LongPressListener.java | 11 ++++ .../ablanco/zoomy/SimpleGestureListener.java | 41 ------------- .../ablanco/zoomy/ZoomableTouchListener.java | 58 ++++++++++++------- .../main/java/com/ablanco/zoomy/Zoomy.java | 18 +++++- 6 files changed, 91 insertions(+), 64 deletions(-) create mode 100644 zoomy/src/main/java/com/ablanco/zoomy/DoubleTapListener.java create mode 100644 zoomy/src/main/java/com/ablanco/zoomy/LongPressListener.java delete mode 100644 zoomy/src/main/java/com/ablanco/zoomy/SimpleGestureListener.java diff --git a/app/src/main/java/com/ablanco/zoomysample/MainActivity.java b/app/src/main/java/com/ablanco/zoomysample/MainActivity.java index 4196ad4..155e5b1 100644 --- a/app/src/main/java/com/ablanco/zoomysample/MainActivity.java +++ b/app/src/main/java/com/ablanco/zoomysample/MainActivity.java @@ -12,6 +12,8 @@ import android.widget.ImageView; import android.widget.Toast; +import com.ablanco.zoomy.DoubleTapListener; +import com.ablanco.zoomy.LongPressListener; import com.ablanco.zoomy.TapListener; import com.ablanco.zoomy.Zoomy; @@ -70,7 +72,21 @@ public void onTap(View v) { Toast.makeText(MainActivity.this, "Tap on " + v.getTag(), Toast.LENGTH_SHORT).show(); } + }) + .longPressListener(new LongPressListener() { + @Override + public void onLongPress(View v) { + Toast.makeText(MainActivity.this, "Long press on " + + v.getTag(), Toast.LENGTH_SHORT).show(); + } + }).doubleTapListener(new DoubleTapListener() { + @Override + public void onDoubleTap(View v) { + Toast.makeText(MainActivity.this, "Double tap on " + + v.getTag(), Toast.LENGTH_SHORT).show(); + } }); + builder.register(); } diff --git a/zoomy/src/main/java/com/ablanco/zoomy/DoubleTapListener.java b/zoomy/src/main/java/com/ablanco/zoomy/DoubleTapListener.java new file mode 100644 index 0000000..11428e8 --- /dev/null +++ b/zoomy/src/main/java/com/ablanco/zoomy/DoubleTapListener.java @@ -0,0 +1,11 @@ +package com.ablanco.zoomy; + +import android.view.View; + +/** + * Created by Álvaro Blanco Cabrero on 04/08/2018. + * Zoomy. + */ +public interface DoubleTapListener { + void onDoubleTap(View v); +} diff --git a/zoomy/src/main/java/com/ablanco/zoomy/LongPressListener.java b/zoomy/src/main/java/com/ablanco/zoomy/LongPressListener.java new file mode 100644 index 0000000..a0f8bf7 --- /dev/null +++ b/zoomy/src/main/java/com/ablanco/zoomy/LongPressListener.java @@ -0,0 +1,11 @@ +package com.ablanco.zoomy; + +import android.view.View; + +/** + * Created by Álvaro Blanco Cabrero on 04/08/2018. + * Zoomy. + */ +public interface LongPressListener { + void onLongPress(View v); +} diff --git a/zoomy/src/main/java/com/ablanco/zoomy/SimpleGestureListener.java b/zoomy/src/main/java/com/ablanco/zoomy/SimpleGestureListener.java deleted file mode 100644 index 42c47b2..0000000 --- a/zoomy/src/main/java/com/ablanco/zoomy/SimpleGestureListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ablanco.zoomy; - -import android.view.GestureDetector; -import android.view.MotionEvent; - -/** - * Created by Álvaro Blanco Cabrero on 13/02/2017. - * Zoomy. - */ - -public class SimpleGestureListener implements GestureDetector.OnGestureListener { - @Override - public boolean onDown(MotionEvent e) { - return true; - } - - @Override - public void onShowPress(MotionEvent e) { - - } - - @Override - public boolean onSingleTapUp(MotionEvent e) { - return true; - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - return true; - } - - @Override - public void onLongPress(MotionEvent e) { - - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - return true; - } -} diff --git a/zoomy/src/main/java/com/ablanco/zoomy/ZoomableTouchListener.java b/zoomy/src/main/java/com/ablanco/zoomy/ZoomableTouchListener.java index f856040..059d67f 100644 --- a/zoomy/src/main/java/com/ablanco/zoomy/ZoomableTouchListener.java +++ b/zoomy/src/main/java/com/ablanco/zoomy/ZoomableTouchListener.java @@ -26,38 +26,44 @@ class ZoomableTouchListener implements View.OnTouchListener, ScaleGestureDetecto private static final float MIN_SCALE_FACTOR = 1f; private static final float MAX_SCALE_FACTOR = 5f; - + private final TapListener mTapListener; + private final LongPressListener mLongPressListener; + private final DoubleTapListener mDoubleTapListener; private int mState = STATE_IDLE; - private TargetContainer mTargetContainer; private View mTarget; private ImageView mZoomableView; private View mShadow; - private ScaleGestureDetector mScaleGestureDetector; private GestureDetector mGestureDetector; - private SimpleGestureListener mGestureListener = new SimpleGestureListener(){ - @Override - public boolean onSingleTapUp(MotionEvent e) { - if(mTapListener != null) mTapListener.onTap(mTarget); - return true; - } - }; + private GestureDetector.SimpleOnGestureListener mGestureListener = + new GestureDetector.SimpleOnGestureListener() { - private float mScaleFactor = 1f; + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if (mTapListener != null) mTapListener.onTap(mTarget); + return true; + } + @Override + public void onLongPress(MotionEvent e) { + if (mLongPressListener != null) mLongPressListener.onLongPress(mTarget); + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + if (mDoubleTapListener != null) mDoubleTapListener.onDoubleTap(mTarget); + return true; + } + }; + private float mScaleFactor = 1f; private PointF mCurrentMovementMidPoint = new PointF(); private PointF mInitialPinchMidPoint = new PointF(); private Point mTargetViewCords = new Point(); - private boolean mAnimatingZoomEnding = false; - private Interpolator mEndZoomingInterpolator; - private ZoomyConfig mConfig; private ZoomListener mZoomListener; - private final TapListener mTapListener; - private Runnable mEndingZoomAction = new Runnable() { @Override public void run() { @@ -77,8 +83,14 @@ public void run() { }; - ZoomableTouchListener(TargetContainer targetContainer, View view, ZoomyConfig config, Interpolator interpolator, - ZoomListener zoomListener, TapListener tapListener) { + ZoomableTouchListener(TargetContainer targetContainer, + View view, + ZoomyConfig config, + Interpolator interpolator, + ZoomListener zoomListener, + TapListener tapListener, + LongPressListener longPressListener, + DoubleTapListener doubleTapListener) { this.mTargetContainer = targetContainer; this.mTarget = view; this.mConfig = config; @@ -88,6 +100,8 @@ public void run() { this.mGestureDetector = new GestureDetector(view.getContext(), mGestureListener); this.mZoomListener = zoomListener; this.mTapListener = tapListener; + this.mLongPressListener = longPressListener; + this.mDoubleTapListener = doubleTapListener; } @Override @@ -240,16 +254,16 @@ private void obscureDecorView(float factor) { private void hideSystemUI() { mTargetContainer.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar - | View.SYSTEM_UI_FLAG_FULLSCREEN); // hide status ba; + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar + | View.SYSTEM_UI_FLAG_FULLSCREEN); // hide status ba; } private void showSystemUI() { mTargetContainer.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); } - private void disableParentTouch(ViewParent view){ + private void disableParentTouch(ViewParent view) { view.requestDisallowInterceptTouchEvent(true); - if(view.getParent() != null) disableParentTouch((view.getParent())); + if (view.getParent() != null) disableParentTouch((view.getParent())); } } diff --git a/zoomy/src/main/java/com/ablanco/zoomy/Zoomy.java b/zoomy/src/main/java/com/ablanco/zoomy/Zoomy.java index bc8694f..81978a8 100644 --- a/zoomy/src/main/java/com/ablanco/zoomy/Zoomy.java +++ b/zoomy/src/main/java/com/ablanco/zoomy/Zoomy.java @@ -36,6 +36,8 @@ public static class Builder { private ZoomListener mZoomListener; private Interpolator mZoomInterpolator; private TapListener mTapListener; + private LongPressListener mLongPressListener; + private DoubleTapListener mdDoubleTapListener; public Builder(Activity activity) { this.mTargetContainer = new ActivityContainer(activity); @@ -86,6 +88,19 @@ public Builder tapListener(TapListener listener) { return this; } + public Builder longPressListener(LongPressListener listener) { + checkNotDisposed(); + this.mLongPressListener = listener; + return this; + } + + + public Builder doubleTapListener(DoubleTapListener listener) { + checkNotDisposed(); + this.mdDoubleTapListener = listener; + return this; + } + public void register() { checkNotDisposed(); if (mConfig == null) mConfig = mDefaultConfig; @@ -94,7 +109,8 @@ public void register() { if (mTargetView == null) throw new IllegalArgumentException("Target view must not be null"); mTargetView.setOnTouchListener(new ZoomableTouchListener(mTargetContainer, mTargetView, - mConfig, mZoomInterpolator, mZoomListener, mTapListener)); + mConfig, mZoomInterpolator, mZoomListener, mTapListener, mLongPressListener, + mdDoubleTapListener)); mDisposed = true; }