Skip to content

Commit e0b54de

Browse files
committed
support double click
1 parent 83bc638 commit e0b54de

File tree

8 files changed

+119
-26
lines changed

8 files changed

+119
-26
lines changed

demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.widget.AdapterView;
88
import android.widget.GridView;
99

10+
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
1011
import com.daimajia.swipedemo.adapter.GridViewAdapter;
1112

1213
public class GridViewExample extends Activity{
@@ -17,7 +18,7 @@ protected void onCreate(Bundle savedInstanceState) {
1718
setContentView(R.layout.gridview);
1819
final GridView gridView = (GridView)findViewById(R.id.gridview);
1920
final GridViewAdapter adapter = new GridViewAdapter(this);
20-
21+
adapter.setMode(SwipeItemMangerImpl.Mode.Multiple);
2122
gridView.setAdapter(adapter);
2223
gridView.setSelected(false);
2324
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.daimajia.swipedemo;
22

33
import android.app.Activity;
4+
import android.content.Context;
45
import android.content.Intent;
56
import android.os.Bundle;
67
import android.util.Log;
@@ -11,6 +12,7 @@
1112
import android.widget.AbsListView;
1213
import android.widget.AdapterView;
1314
import android.widget.ListView;
15+
import android.widget.Toast;
1416

1517
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
1618
import com.daimajia.swipedemo.adapter.ListViewAdapter;
@@ -19,7 +21,7 @@ public class ListViewExample extends Activity {
1921

2022
private ListView mListView;
2123
private ListViewAdapter mAdapter;
22-
24+
private Context mContext = this;
2325
@Override
2426
protected void onCreate(Bundle savedInstanceState) {
2527
super.onCreate(savedInstanceState);
@@ -41,7 +43,7 @@ protected void onCreate(Bundle savedInstanceState) {
4143
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
4244
@Override
4345
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
44-
Log.e("ListView", "onItemClick:" + position);
46+
Toast.makeText(mContext, "Click", Toast.LENGTH_SHORT).show();
4547
}
4648
});
4749
mListView.setOnTouchListener(new View.OnTouchListener() {
@@ -54,7 +56,7 @@ public boolean onTouch(View v, MotionEvent event) {
5456
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
5557
@Override
5658
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
57-
Log.e("ListView","onItemLongClick:" + position);
59+
Toast.makeText(mContext, "OnItemLongClickListener", Toast.LENGTH_SHORT).show();
5860
return false;
5961
}
6062
});

demo/src/main/java/com/daimajia/swipedemo/NestedExample.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,31 @@
22

33
import android.app.Activity;
44
import android.os.Bundle;
5-
import android.util.Log;
65
import android.view.View;
6+
import android.widget.Toast;
7+
8+
import com.daimajia.swipe.SwipeLayout;
79

810
public class NestedExample extends Activity{
11+
912
@Override
1013
protected void onCreate(Bundle savedInstanceState) {
1114
super.onCreate(savedInstanceState);
1215
setContentView(R.layout.complicate_layout);
13-
findViewById(R.id.hhhhh).setOnClickListener(new View.OnClickListener() {
16+
SwipeLayout swipeLayout = (SwipeLayout)findViewById(R.id.test_swipe_swipe);
17+
swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
18+
@Override
19+
public void onDoubleClick(SwipeLayout layout, boolean surface) {
20+
Toast.makeText(getApplicationContext(), "DoubleClick", Toast.LENGTH_SHORT).show();
21+
}
22+
});
23+
swipeLayout.findViewById(R.id.trash).setOnClickListener(new View.OnClickListener() {
1424
@Override
1525
public void onClick(View v) {
16-
Log.e("Tag","got");
26+
Toast.makeText(getApplicationContext(), "Click", Toast.LENGTH_SHORT).show();
1727
}
1828
});
1929
}
30+
31+
2032
}

demo/src/main/java/com/daimajia/swipedemo/adapter/ListViewAdapter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
import android.view.View;
66
import android.view.ViewGroup;
77
import android.widget.TextView;
8+
import android.widget.Toast;
89

910
import com.daimajia.androidanimations.library.Techniques;
1011
import com.daimajia.androidanimations.library.YoYo;
11-
import com.daimajia.swipe.adapters.BaseSwipeAdapter;
1212
import com.daimajia.swipe.SimpleSwipeListener;
1313
import com.daimajia.swipe.SwipeLayout;
14+
import com.daimajia.swipe.adapters.BaseSwipeAdapter;
1415
import com.daimajia.swipedemo.R;
1516

1617
public class ListViewAdapter extends BaseSwipeAdapter {
@@ -36,6 +37,12 @@ public void onOpen(SwipeLayout layout) {
3637
YoYo.with(Techniques.Tada).duration(500).delay(100).playOn(layout.findViewById(R.id.trash));
3738
}
3839
});
40+
swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
41+
@Override
42+
public void onDoubleClick(SwipeLayout layout, boolean surface) {
43+
Toast.makeText(mContext, "DoubleClick", Toast.LENGTH_SHORT).show();
44+
}
45+
});
3946
return v;
4047
}
4148

demo/src/main/res/layout/complicate_layout.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@
66
<include layout="@layout/sampe_nested_scrollview" android:layout_height="80dp" android:layout_width="match_parent"/>
77
<include layout="@layout/sampe_nested_seekbar" android:layout_height="80dp" android:layout_width="match_parent" android:layout_marginTop="20dp"/>
88
<include layout="@layout/sampe_nested_edittext" android:layout_height="80dp" android:layout_width="match_parent" android:layout_marginTop="20dp"/>
9+
<include layout="@layout/sample_nested_parent" android:layout_height="80dp" android:layout_width="match_parent" android:layout_marginTop="20dp"/>
10+
911
</LinearLayout>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<FrameLayout android:id="@+id/parent_framelayout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
3+
<com.daimajia.swipe.SwipeLayout
4+
android:id="@+id/test_swipe_swipe"
5+
android:layout_width="match_parent" android:layout_height="80dp">
6+
<LinearLayout
7+
android:layout_width="80dp"
8+
android:layout_height="match_parent">
9+
<ImageView
10+
android:id="@+id/trash"
11+
android:src="@drawable/trash"
12+
android:layout_width="match_parent"
13+
android:background="#FF3B30"
14+
android:paddingLeft="25dp"
15+
android:paddingRight="25dp"
16+
android:layout_height="match_parent" />
17+
</LinearLayout>
18+
19+
<LinearLayout
20+
android:padding="10dp"
21+
android:background="#ffffff"
22+
android:layout_width="match_parent"
23+
android:layout_height="match_parent">
24+
<TextView
25+
android:text="SeekBar"
26+
android:layout_width="wrap_content"
27+
android:layout_height="wrap_content" />
28+
</LinearLayout>
29+
</com.daimajia.swipe.SwipeLayout>
30+
</FrameLayout>

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
# org.gradle.parallel=true
1919

2020

21-
VERSION_NAME=1.1.4
22-
VERSION_CODE=15
21+
VERSION_NAME=1.1.6
22+
VERSION_CODE=17
2323
GROUP=com.daimajia.swipelayout
2424

2525
ANDROID_BUILD_MIN_SDK_VERSION=8

library/src/main/java/com/daimajia/swipe/SwipeLayout.java

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public class SwipeLayout extends FrameLayout {
3535
private Map<View, ArrayList<OnRevealListener>> mRevealListeners = new HashMap<View, ArrayList<OnRevealListener>>();
3636
private Map<View, Boolean> mShowEntirely = new HashMap<View, Boolean>();
3737

38+
private DoubleClickListener mDoubleClickListener;
39+
3840
private boolean mSwipeEnabled = true;
3941

4042
public static enum DragEdge {
@@ -126,7 +128,7 @@ public void addRevealListener(int childId, OnRevealListener l){
126128
throw new IllegalArgumentException("Child does not belong to SwipeListener.");
127129
}
128130

129-
if(mShowEntirely.containsKey(child) == false){
131+
if(!mShowEntirely.containsKey(child)){
130132
mShowEntirely.put(child, false);
131133
}
132134
if(mRevealListeners.get(child) == null)
@@ -768,6 +770,7 @@ public boolean onTouchEvent(MotionEvent event) {
768770
}else if(status == Status.Open){
769771
touching = getBottomView();
770772
}
773+
771774
switch (action){
772775
case MotionEvent.ACTION_DOWN:
773776
mDragHelper.processTouchEvent(event);
@@ -909,7 +912,22 @@ private AdapterView getAdapterView(){
909912
return null;
910913
}
911914

912-
915+
private void performAdapterViewItemClick(MotionEvent e){
916+
ViewParent t = getParent();
917+
while(t != null) {
918+
if(t instanceof AdapterView){
919+
AdapterView view = (AdapterView)t;
920+
int p = view.getPositionForView(SwipeLayout.this);
921+
if( p != AdapterView.INVALID_POSITION &&
922+
view.performItemClick(view.getChildAt(p), p, view.getAdapter().getItemId(p)))
923+
return;
924+
}else{
925+
if(t instanceof View && ((View) t).performClick())
926+
return;
927+
}
928+
t = t.getParent();
929+
}
930+
}
913931

914932
private GestureDetector gestureDetector = new GestureDetector(getContext(), new SwipeDetector());
915933
class SwipeDetector extends GestureDetector.SimpleOnGestureListener{
@@ -927,28 +945,41 @@ public boolean onDown(MotionEvent e) {
927945
*/
928946
@Override
929947
public boolean onSingleTapUp(MotionEvent e) {
930-
ViewParent t = getParent();
931-
while(t != null) {
932-
if(t instanceof AdapterView){
933-
AdapterView view = (AdapterView)t;
934-
int p = view.getPositionForView(SwipeLayout.this);
935-
if( p != AdapterView.INVALID_POSITION &&
936-
view.performItemClick(view.getChildAt(p), p, view.getAdapter().getItemId(p)))
937-
return true;
938-
}else{
939-
if(t instanceof View && ((View) t).performClick())
940-
return true;
941-
}
942-
t = t.getParent();
948+
if(mDoubleClickListener == null){
949+
performAdapterViewItemClick(e);
943950
}
944-
return false;
951+
return true;
952+
}
953+
954+
@Override
955+
public boolean onSingleTapConfirmed(MotionEvent e) {
956+
if(mDoubleClickListener != null){
957+
performAdapterViewItemClick(e);
958+
}
959+
return true;
945960
}
946961

947962
@Override
948963
public void onLongPress(MotionEvent e) {
949964
performLongClick();
950965
}
951966

967+
@Override
968+
public boolean onDoubleTap(MotionEvent e) {
969+
if(mDoubleClickListener != null){
970+
View target;
971+
ViewGroup bottom = getBottomView();
972+
ViewGroup surface = getSurfaceView();
973+
if(e.getX() > bottom.getLeft() && e.getX() < bottom.getRight()
974+
&& e.getY() > bottom.getTop() && e.getY() < bottom.getBottom()){
975+
target = bottom;
976+
}else{
977+
target = surface;
978+
}
979+
mDoubleClickListener.onDoubleClick(SwipeLayout.this, target == surface);
980+
}
981+
return true;
982+
}
952983
}
953984

954985
public void setDragEdge(DragEdge dragEdge){
@@ -1250,6 +1281,14 @@ private Rect computeBottomLayDown(DragEdge dragEdge){
12501281
return new Rect(bl, bt, br, bb);
12511282
}
12521283

1284+
public void setOnDoubleClickListener(DoubleClickListener doubleClickListener){
1285+
mDoubleClickListener = doubleClickListener;
1286+
}
1287+
1288+
public interface DoubleClickListener {
1289+
public void onDoubleClick(SwipeLayout layout, boolean surface);
1290+
}
1291+
12531292
private int dp2px(float dp){
12541293
return (int) (dp * getContext().getResources().getDisplayMetrics().density + 0.5f);
12551294
}

0 commit comments

Comments
 (0)