From a7bb8465e242f0e91fb78b24ab1a6915394df343 Mon Sep 17 00:00:00 2001 From: sqljim Date: Sun, 14 Apr 2019 10:22:51 +0530 Subject: [PATCH 1/2] Adding long click functionality --- .../carouselview/CarouselViewPager.java | 37 ++++++++++++++++++- .../carouselview/ImageClickListener.java | 2 + .../SampleCarouselViewActivity.java | 6 +++ .../layout/activity_sample_carousel_view.xml | 1 + 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/carouselview/src/main/java/com/synnapps/carouselview/CarouselViewPager.java b/carouselview/src/main/java/com/synnapps/carouselview/CarouselViewPager.java index 1551a45..58eea52 100644 --- a/carouselview/src/main/java/com/synnapps/carouselview/CarouselViewPager.java +++ b/carouselview/src/main/java/com/synnapps/carouselview/CarouselViewPager.java @@ -1,20 +1,27 @@ package com.synnapps.carouselview; import android.content.Context; +import android.os.Handler; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.ViewConfiguration; import android.view.animation.Interpolator; import java.lang.reflect.Field; /** * Created by Sayyam on 3/28/16. + * + * Edited by sqljim on 4/14/19 */ public class CarouselViewPager extends ViewPager { private ImageClickListener imageClickListener; - private float oldX = 0, newX = 0, sens = 5; + private float oldX = 0, newX = 0, oldY = 0, newY = 0, sens = 5; + private boolean longClick; + + public void setImageClickListener(ImageClickListener imageClickListener) { this.imageClickListener = imageClickListener; @@ -58,23 +65,49 @@ public void setTransitionVelocity(int scrollFactor) { mScroller.setmScrollDuration(scrollFactor); } + final Handler handler = new Handler(); + + Runnable mlongClicked = new Runnable() { + public void run() { + longClick = true; + } + }; + @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: oldX = ev.getX(); + oldY = ev.getY(); + + //This is where we start a timer, when the timer runs out the longClick boolean + //is set to true, signifying a long press has occurred. + longClick = false; + handler.postDelayed(mlongClicked, ViewConfiguration.getLongPressTimeout()); break; + //The below detects whether a click/longClick has occurred + //or whether a line has been drawn case MotionEvent.ACTION_UP: newX = ev.getX(); - if (Math.abs(oldX - newX) < sens) { + newY = ev.getY(); + + handler.removeCallbacks(mlongClicked); + if (Math.abs(oldX - newX) < sens && !longClick) { if(imageClickListener != null) imageClickListener.onClick(getCurrentItem()); return true; } + else if (Math.abs(oldX - newX) < sens && Math.abs(oldY - newY) < sens && longClick) + { + if(imageClickListener != null) + imageClickListener.onLongClick(getCurrentItem()); + return true; + } oldX = 0; newX = 0; break; + } return super.onTouchEvent(ev); diff --git a/carouselview/src/main/java/com/synnapps/carouselview/ImageClickListener.java b/carouselview/src/main/java/com/synnapps/carouselview/ImageClickListener.java index f499a69..db0f627 100644 --- a/carouselview/src/main/java/com/synnapps/carouselview/ImageClickListener.java +++ b/carouselview/src/main/java/com/synnapps/carouselview/ImageClickListener.java @@ -6,4 +6,6 @@ public interface ImageClickListener { void onClick(int position); + + void onLongClick(int position); } diff --git a/sample/src/main/java/com/synnapps/example/carouselview/SampleCarouselViewActivity.java b/sample/src/main/java/com/synnapps/example/carouselview/SampleCarouselViewActivity.java index 3c4b5a6..6dca364 100644 --- a/sample/src/main/java/com/synnapps/example/carouselview/SampleCarouselViewActivity.java +++ b/sample/src/main/java/com/synnapps/example/carouselview/SampleCarouselViewActivity.java @@ -60,6 +60,12 @@ protected void onCreate(Bundle savedInstanceState) { public void onClick(int position) { Toast.makeText(SampleCarouselViewActivity.this, "Clicked item: "+ position, Toast.LENGTH_SHORT).show(); } + + @Override + public void onLongClick(int position) { + Toast.makeText(SampleCarouselViewActivity.this, "Long clicked item: "+ position, Toast.LENGTH_SHORT).show(); + } + }); } diff --git a/sample/src/main/res/layout/activity_sample_carousel_view.xml b/sample/src/main/res/layout/activity_sample_carousel_view.xml index 8b93150..45fc7ed 100644 --- a/sample/src/main/res/layout/activity_sample_carousel_view.xml +++ b/sample/src/main/res/layout/activity_sample_carousel_view.xml @@ -11,6 +11,7 @@ android:layout_width="match_parent" android:layout_height="200dp" android:background="#444" + android:longClickable="true" app:animateOnBoundary="true" app:autoPlay="true" app:fillColor="#FFFFFFFF" From a4837bbf57a8e8dc860ae98b2babcf5750b579d0 Mon Sep 17 00:00:00 2001 From: sqljim Date: Sun, 14 Apr 2019 10:38:02 +0530 Subject: [PATCH 2/2] Updating readme to reflect new changes --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 82991fd..e28c52b 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Usage android:id="@+id/carouselView" android:layout_width="match_parent" android:layout_height="200dp" + android:longClickable="true" app:fillColor="#FFFFFFFF" app:pageColor="#00000000" app:radius="6dp" @@ -111,6 +112,11 @@ customCarouselView.setImageClickListener(new ImageClickListener() { @Override public void onClick(int position) { Toast.makeText(SampleCarouselViewActivity.this, "Clicked item: "+ position, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onLongClick(int position) { + Toast.makeText(SampleCarouselViewActivity.this, "Long clicked item: "+ position, Toast.LENGTH_SHORT).show(); } }); ```