From 49df89ddbde7e63e5389bdc898b738ef7b1b0086 Mon Sep 17 00:00:00 2001 From: Mauro Vietri Date: Sun, 18 Aug 2019 19:48:10 -0300 Subject: [PATCH 1/3] Swipe Actions' icons at same level as touch event --- .../dank/widgets/swipe/SwipeableLayout.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java b/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java index db1853fe0..4b0c0d3ff 100644 --- a/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java +++ b/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java @@ -13,9 +13,11 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import android.util.AttributeSet; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; +import android.widget.Toast; import timber.log.Timber; @@ -134,6 +136,17 @@ protected void dispatchDraw(Canvas canvas) { // ======== SWIPE ======== // + int valueY = 0; + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_MOVE){ + valueY = (int)event.getY(); + Timber.w("ACTION_DOWN "+"X: "+event.getX()+" Y: "+event.getY()); + } + return true; + } + public void setSwipeTranslation(float translationX) { if (!isLaidOut()) { Timber.w("SwipeableLayout hasn't been measured yet!"); @@ -162,6 +175,12 @@ public void setSwipeTranslation(float translationX) { swipeActionTriggerDrawable.setBounds((int) translationX, 0, (int) (getWidth() + translationX), getHeight()); // Move the icon along with the View being swiped. + if (valueY > (actionIconView.getHeight() / 2)) { + actionIconView.setY(valueY - (actionIconView.getHeight() / 2)); + } else { + actionIconView.setY(valueY); + } + if (swipingFromEndToStart) { actionIconView.setTranslationX(swipeableChild.getRight() + translationX); } else { From 0a0a8464d13ecc809934c151346d7789b4a00a34 Mon Sep 17 00:00:00 2001 From: Esselans Date: Tue, 12 Nov 2019 20:16:37 -0300 Subject: [PATCH 2/3] Make the gestures' icons follow touch event position on Y --- .../java/me/saket/dank/widgets/swipe/SwipeableLayout.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java b/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java index 4b0c0d3ff..3ce4c85e6 100644 --- a/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java +++ b/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java @@ -16,8 +16,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.Toast; +import android.widget.FrameLayout; import timber.log.Timber; @@ -141,8 +140,7 @@ protected void dispatchDraw(Canvas canvas) { @Override public boolean onInterceptTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_MOVE){ - valueY = (int)event.getY(); - Timber.w("ACTION_DOWN "+"X: "+event.getX()+" Y: "+event.getY()); + valueY = (int)event.getY(); } return true; } From 79cabc4a5c47ecf6c24f9a8fadb62b1f5ec43ddc Mon Sep 17 00:00:00 2001 From: Esselans Date: Wed, 13 Nov 2019 21:05:58 -0300 Subject: [PATCH 3/3] Return false to keep the touch flow going - Cannot click links in thread view --- .../java/me/saket/dank/widgets/swipe/SwipeableLayout.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java b/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java index 3ce4c85e6..e5b8cb857 100644 --- a/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java +++ b/app/src/main/java/me/saket/dank/widgets/swipe/SwipeableLayout.java @@ -140,9 +140,9 @@ protected void dispatchDraw(Canvas canvas) { @Override public boolean onInterceptTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_MOVE){ - valueY = (int)event.getY(); + valueY = (int)event.getY(); } - return true; + return false; } public void setSwipeTranslation(float translationX) {