diff --git a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java index 0e2b3d4..8e79c45 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.AdapterView; import android.widget.GridView; +import com.daimajia.swipe.implments.SwipeItemMangerImpl; import com.daimajia.swipedemo.adapter.GridViewAdapter; public class GridViewExample extends Activity{ @@ -17,7 +18,7 @@ public class GridViewExample extends Activity{ setContentView(R.layout.gridview); final GridView gridView = (GridView)findViewById(R.id.gridview); final GridViewAdapter adapter = new GridViewAdapter(this); - + adapter.setMode(SwipeItemMangerImpl.Mode.Multiple); gridView.setAdapter(adapter); gridView.setSelected(false); gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { diff --git a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java index 6729a5d..3079cf4 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java @@ -1,6 +1,7 @@ package com.daimajia.swipedemo; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; @@ -11,6 +12,7 @@ import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; +import android.widget.Toast; import com.daimajia.swipe.implments.SwipeItemMangerImpl; import com.daimajia.swipedemo.adapter.ListViewAdapter; @@ -19,7 +21,7 @@ public class ListViewExample extends Activity { private ListView mListView; private ListViewAdapter mAdapter; - + private Context mContext = this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -41,7 +43,7 @@ public class ListViewExample extends Activity { mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Log.e("ListView", "onItemClick:" + position); + Toast.makeText(mContext, "Click", Toast.LENGTH_SHORT).show(); } }); mListView.setOnTouchListener(new View.OnTouchListener() { @@ -54,7 +56,7 @@ public class ListViewExample extends Activity { mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { - Log.e("ListView","onItemLongClick:" + position); + Toast.makeText(mContext, "OnItemLongClickListener", Toast.LENGTH_SHORT).show(); return false; } }); diff --git a/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java b/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java index d6396ba..4391097 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java @@ -2,19 +2,31 @@ package com.daimajia.swipedemo; import android.app.Activity; import android.os.Bundle; -import android.util.Log; import android.view.View; +import android.widget.Toast; + +import com.daimajia.swipe.SwipeLayout; public class NestedExample extends Activity{ + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.complicate_layout); - findViewById(R.id.hhhhh).setOnClickListener(new View.OnClickListener() { + SwipeLayout swipeLayout = (SwipeLayout)findViewById(R.id.test_swipe_swipe); + swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() { + @Override + public void onDoubleClick(SwipeLayout layout, boolean surface) { + Toast.makeText(getApplicationContext(), "DoubleClick", Toast.LENGTH_SHORT).show(); + } + }); + swipeLayout.findViewById(R.id.trash).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Log.e("Tag","got"); + Toast.makeText(getApplicationContext(), "Click", Toast.LENGTH_SHORT).show(); } }); } + + } diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/ListViewAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/ListViewAdapter.java index b4912a5..074e2de 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/adapter/ListViewAdapter.java +++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/ListViewAdapter.java @@ -5,12 +5,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import android.widget.Toast; import com.daimajia.androidanimations.library.Techniques; import com.daimajia.androidanimations.library.YoYo; -import com.daimajia.swipe.adapters.BaseSwipeAdapter; import com.daimajia.swipe.SimpleSwipeListener; import com.daimajia.swipe.SwipeLayout; +import com.daimajia.swipe.adapters.BaseSwipeAdapter; import com.daimajia.swipedemo.R; public class ListViewAdapter extends BaseSwipeAdapter { @@ -36,6 +37,12 @@ public class ListViewAdapter extends BaseSwipeAdapter { YoYo.with(Techniques.Tada).duration(500).delay(100).playOn(layout.findViewById(R.id.trash)); } }); + swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() { + @Override + public void onDoubleClick(SwipeLayout layout, boolean surface) { + Toast.makeText(mContext, "DoubleClick", Toast.LENGTH_SHORT).show(); + } + }); return v; } diff --git a/demo/src/main/res/layout/complicate_layout.xml b/demo/src/main/res/layout/complicate_layout.xml index 5cc946c..089c476 100644 --- a/demo/src/main/res/layout/complicate_layout.xml +++ b/demo/src/main/res/layout/complicate_layout.xml @@ -6,4 +6,6 @@ + + \ No newline at end of file diff --git a/demo/src/main/res/layout/sample_nested_parent.xml b/demo/src/main/res/layout/sample_nested_parent.xml new file mode 100644 index 0000000..9d64c8b --- /dev/null +++ b/demo/src/main/res/layout/sample_nested_parent.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 9385840..0cb9483 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,8 +18,8 @@ # org.gradle.parallel=true -VERSION_NAME=1.1.4 -VERSION_CODE=15 +VERSION_NAME=1.1.6 +VERSION_CODE=17 GROUP=com.daimajia.swipelayout ANDROID_BUILD_MIN_SDK_VERSION=8 diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index 72aae5a..0fa4825 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -35,6 +35,8 @@ public class SwipeLayout extends FrameLayout { private Map> mRevealListeners = new HashMap>(); private Map mShowEntirely = new HashMap(); + private DoubleClickListener mDoubleClickListener; + private boolean mSwipeEnabled = true; public static enum DragEdge { @@ -126,7 +128,7 @@ public class SwipeLayout extends FrameLayout { throw new IllegalArgumentException("Child does not belong to SwipeListener."); } - if(mShowEntirely.containsKey(child) == false){ + if(!mShowEntirely.containsKey(child)){ mShowEntirely.put(child, false); } if(mRevealListeners.get(child) == null) @@ -768,6 +770,7 @@ public class SwipeLayout extends FrameLayout { }else if(status == Status.Open){ touching = getBottomView(); } + switch (action){ case MotionEvent.ACTION_DOWN: mDragHelper.processTouchEvent(event); @@ -909,7 +912,22 @@ public class SwipeLayout extends FrameLayout { return null; } - + private void performAdapterViewItemClick(MotionEvent e){ + ViewParent t = getParent(); + while(t != null) { + if(t instanceof AdapterView){ + AdapterView view = (AdapterView)t; + int p = view.getPositionForView(SwipeLayout.this); + if( p != AdapterView.INVALID_POSITION && + view.performItemClick(view.getChildAt(p), p, view.getAdapter().getItemId(p))) + return; + }else{ + if(t instanceof View && ((View) t).performClick()) + return; + } + t = t.getParent(); + } + } private GestureDetector gestureDetector = new GestureDetector(getContext(), new SwipeDetector()); class SwipeDetector extends GestureDetector.SimpleOnGestureListener{ @@ -927,21 +945,18 @@ public class SwipeLayout extends FrameLayout { */ @Override public boolean onSingleTapUp(MotionEvent e) { - ViewParent t = getParent(); - while(t != null) { - if(t instanceof AdapterView){ - AdapterView view = (AdapterView)t; - int p = view.getPositionForView(SwipeLayout.this); - if( p != AdapterView.INVALID_POSITION && - view.performItemClick(view.getChildAt(p), p, view.getAdapter().getItemId(p))) - return true; - }else{ - if(t instanceof View && ((View) t).performClick()) - return true; - } - t = t.getParent(); + if(mDoubleClickListener == null){ + performAdapterViewItemClick(e); } - return false; + return true; + } + + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if(mDoubleClickListener != null){ + performAdapterViewItemClick(e); + } + return true; } @Override @@ -949,6 +964,22 @@ public class SwipeLayout extends FrameLayout { performLongClick(); } + @Override + public boolean onDoubleTap(MotionEvent e) { + if(mDoubleClickListener != null){ + View target; + ViewGroup bottom = getBottomView(); + ViewGroup surface = getSurfaceView(); + if(e.getX() > bottom.getLeft() && e.getX() < bottom.getRight() + && e.getY() > bottom.getTop() && e.getY() < bottom.getBottom()){ + target = bottom; + }else{ + target = surface; + } + mDoubleClickListener.onDoubleClick(SwipeLayout.this, target == surface); + } + return true; + } } public void setDragEdge(DragEdge dragEdge){ @@ -1250,6 +1281,14 @@ public class SwipeLayout extends FrameLayout { return new Rect(bl, bt, br, bb); } + public void setOnDoubleClickListener(DoubleClickListener doubleClickListener){ + mDoubleClickListener = doubleClickListener; + } + + public interface DoubleClickListener { + public void onDoubleClick(SwipeLayout layout, boolean surface); + } + private int dp2px(float dp){ return (int) (dp * getContext().getResources().getDisplayMetrics().density + 0.5f); }