From cc863e8d34dabb88cceb6eae8930ecf17aaa036c Mon Sep 17 00:00:00 2001 From: NithinNara Date: Mon, 17 Aug 2015 20:01:13 +0530 Subject: [PATCH 1/5] Adds an extra method for listener which can disable & enable swipe --- .../flingswipe/FlingCardListener.java | 48 ++++++++++++------- .../flingswipe/SwipeFlingAdapterView.java | 9 +++- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/library/src/main/java/com/lorentzos/flingswipe/FlingCardListener.java b/library/src/main/java/com/lorentzos/flingswipe/FlingCardListener.java index 5e15f10628..14b727acef 100644 --- a/library/src/main/java/com/lorentzos/flingswipe/FlingCardListener.java +++ b/library/src/main/java/com/lorentzos/flingswipe/FlingCardListener.java @@ -4,6 +4,7 @@ import android.animation.AnimatorListenerAdapter; import android.graphics.PointF; import android.util.Log; +import android.util.Pair; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -70,9 +71,14 @@ public FlingCardListener(View frame, Object itemAtPosition, float rotation_degre } - public boolean onTouch(View view, MotionEvent event) { + Pair swipeEnablers = mFlingListener.isEnabled(); + Boolean leftSwipeDisable = !swipeEnablers.first; + Boolean rightSwipeDisable = !swipeEnablers.second; + if(leftSwipeDisable && rightSwipeDisable) + return false; //completely disable swipe + switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: @@ -146,23 +152,24 @@ public boolean onTouch(View view, MotionEvent event) { final float dx = xMove - aDownTouchX; final float dy = yMove - aDownTouchY; - // Move the frame - aPosX += dx; - aPosY += dy; - - // calculate the rotation degrees - float distobjectX = aPosX - objectX; - float rotation = BASE_ROTATION_DEGREES * 2.f * distobjectX / parentWidth; - if (touchPosition == TOUCH_BELOW) { - rotation = -rotation; - } + if(displacementAdheresToSwipeChecks(dx, leftSwipeDisable, rightSwipeDisable)) { + aPosX += dx; + aPosY += dy; + + // calculate the rotation degrees + float distobjectX = aPosX - objectX; + float rotation = BASE_ROTATION_DEGREES * 2.f * distobjectX / parentWidth; + if (touchPosition == TOUCH_BELOW) { + rotation = -rotation; + } - //in this area would be code for doing something with the view as the frame moves. - frame.setX(aPosX); - frame.setY(aPosY); - frame.setRotation(rotation); - mFlingListener.onScroll(getScrollProgressPercent()); + //in this area would be code for doing something with the view as the frame moves. + frame.setX(aPosX); + frame.setY(aPosY); + frame.setRotation(rotation); + mFlingListener.onScroll(getScrollProgressPercent()); + } break; case MotionEvent.ACTION_CANCEL: { @@ -175,6 +182,13 @@ public boolean onTouch(View view, MotionEvent event) { return true; } + private boolean displacementAdheresToSwipeChecks(float dx,boolean leftSwipeDisable,boolean rightSwipeDisable){ + if (leftSwipeDisable) + return dx > 0; + else + return !rightSwipeDisable || dx < 0; + } + private float getScrollProgressPercent() { if (movedBeyondLeftBorder()) { return -1f; @@ -334,6 +348,8 @@ public PointF getLastPoint() { } protected interface FlingListener { + Pair isEnabled(); + void onCardExited(); void leftExit(Object dataObject); diff --git a/library/src/main/java/com/lorentzos/flingswipe/SwipeFlingAdapterView.java b/library/src/main/java/com/lorentzos/flingswipe/SwipeFlingAdapterView.java index 1defa04420..ec0a393067 100644 --- a/library/src/main/java/com/lorentzos/flingswipe/SwipeFlingAdapterView.java +++ b/library/src/main/java/com/lorentzos/flingswipe/SwipeFlingAdapterView.java @@ -7,6 +7,7 @@ import android.graphics.PointF; import android.os.Build; import android.util.AttributeSet; +import android.util.Pair; import android.view.Gravity; import android.view.View; import android.widget.Adapter; @@ -203,8 +204,6 @@ private void makeAndAddView(View child) { } - - /** * Set the top view and add the fling listener */ @@ -217,6 +216,11 @@ private void setTopView() { flingCardListener = new FlingCardListener(mActiveCard, mAdapter.getItem(0), ROTATION_DEGREES, new FlingCardListener.FlingListener() { + @Override + public Pair isEnabled() { + return mFlingListener.isEnabled(); + } + @Override public void onCardExited() { mActiveCard = null; @@ -323,6 +327,7 @@ public interface OnItemClickListener { } public interface onFlingListener { + Pair isEnabled(); void removeFirstObjectInAdapter(); void onLeftCardExit(Object dataObject); void onRightCardExit(Object dataObject); From e97cef3a7322dcd7d704e1454ff953fd5b4d9181 Mon Sep 17 00:00:00 2001 From: NithinNara Date: Mon, 17 Aug 2015 20:02:04 +0530 Subject: [PATCH 2/5] Adds toggle buttons to show the disabling and enabling in either directions --- .../com/lorentzos/swipecards/MyActivity.java | 57 +++++++++++-------- example/src/main/res/layout/buttons.xml | 14 +++-- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/example/src/main/java/com/lorentzos/swipecards/MyActivity.java b/example/src/main/java/com/lorentzos/swipecards/MyActivity.java index 9be01027fc..4ac4a7634a 100644 --- a/example/src/main/java/com/lorentzos/swipecards/MyActivity.java +++ b/example/src/main/java/com/lorentzos/swipecards/MyActivity.java @@ -4,17 +4,19 @@ import android.content.Context; import android.os.Bundle; import android.util.Log; +import android.util.Pair; import android.view.View; import android.widget.ArrayAdapter; +import android.widget.CompoundButton; import android.widget.Toast; +import android.widget.ToggleButton; import com.lorentzos.flingswipe.SwipeFlingAdapterView; import java.util.ArrayList; +import butterknife.Bind; import butterknife.ButterKnife; -import butterknife.InjectView; -import butterknife.OnClick; public class MyActivity extends Activity { @@ -22,16 +24,18 @@ public class MyActivity extends Activity { private ArrayList al; private ArrayAdapter arrayAdapter; private int i; + private boolean left_enable_switch = false; + private boolean right_enable_switch = false; - @InjectView(R.id.frame) SwipeFlingAdapterView flingContainer; - + @Bind(R.id.frame) SwipeFlingAdapterView flingContainer; + @Bind(R.id.left_enable_switch) ToggleButton lToggle; + @Bind(R.id.right_enable_switch) ToggleButton rToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); - ButterKnife.inject(this); - + ButterKnife.bind(this); al = new ArrayList<>(); al.add("php"); @@ -45,9 +49,16 @@ protected void onCreate(Bundle savedInstanceState) { arrayAdapter = new ArrayAdapter<>(this, R.layout.item, R.id.helloText, al ); - flingContainer.setAdapter(arrayAdapter); - flingContainer.setFlingListener(new SwipeFlingAdapterView.onFlingListener() { + + final SwipeFlingAdapterView.onFlingListener listener = + new SwipeFlingAdapterView.onFlingListener() { + + @Override + public Pair isEnabled() { + return new Pair<>(left_enable_switch,right_enable_switch); + } + @Override public void removeFirstObjectInAdapter() { // this is the simplest way to delete an object from the Adapter (/AdapterView) @@ -84,8 +95,9 @@ public void onScroll(float scrollProgressPercent) { view.findViewById(R.id.item_swipe_right_indicator).setAlpha(scrollProgressPercent < 0 ? -scrollProgressPercent : 0); view.findViewById(R.id.item_swipe_left_indicator).setAlpha(scrollProgressPercent > 0 ? scrollProgressPercent : 0); } - }); + }; + flingContainer.setFlingListener(listener); // Optionally add an OnItemClickListener flingContainer.setOnItemClickListener(new SwipeFlingAdapterView.OnItemClickListener() { @@ -95,6 +107,17 @@ public void onItemClicked(int itemPosition, Object dataObject) { } }); + lToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + left_enable_switch = isChecked; + } + }); + + rToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + right_enable_switch = isChecked; + } + }); } static void makeToast(Context ctx, String s){ @@ -102,20 +125,4 @@ static void makeToast(Context ctx, String s){ } - @OnClick(R.id.right) - public void right() { - /** - * Trigger the right event manually. - */ - flingContainer.getTopCardListener().selectRight(); - } - - @OnClick(R.id.left) - public void left() { - flingContainer.getTopCardListener().selectLeft(); - } - - - - } diff --git a/example/src/main/res/layout/buttons.xml b/example/src/main/res/layout/buttons.xml index 993e0f840d..fe97735bf2 100644 --- a/example/src/main/res/layout/buttons.xml +++ b/example/src/main/res/layout/buttons.xml @@ -7,17 +7,19 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> -