@@ -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