2016-08-12 8 views
0

Привет Я использую макет прокрутки в моем recyclerview. Также я хочу реализовать один и два раза для моего макета списка элементов. Если я использую сенсорный прослушиватель, мой салфетка не будет работать. Поэтому я хочу обнаружить одиночный и двойной щелчок макета с помощью setOnClickListener. Пожалуйста, предложите мне идею обнаружения одиночного и двойного крана для макета.Как обнаружить одиночный и двойной кран для конкретного макета с помощью setOnClickListener android

+0

Вы можете использовать любую переменную для проверки количества попыток щелчка в onClick of view. – SANAT

+0

Используйте 'GestureDetector'. Проверьте эту ссылку для получения дополнительной информации: https://developer.android.com/training/gestures/detector.html – earthw0rmjim

+0

@ user13 хорошо, спасибо. Я проверю и дам вам знать. – Sangeetha

ответ

0

Используйте следующие шаги:

  1. Добавить на сенсорном слушателе к представлению
  2. Добавить глобальную переменный для записи времени прикосновения
  3. Compare сенсорного времени с предыдущим временем касания. Если разница меньше порога, например, 1 секунда, то это двойной кран.
+0

хорошо, спасибо. Я проверю и дам вам знать. – Sangeetha

0

Попробуйте

int c = 0; 
btn.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    c++; 
    Handler handler = new Handler(); 
    Runnable r = new Runnable() { 

     @Override 
     public void run() { 
      c = 0; 
     } 
    }; 

    if (c == 1) { 
     //Single click 
     handler.postDelayed(r, 250); 
    } else if (c == 2) { 
     //Double click 
     c = 0; 
     ShowDailog(); 
    } 


} 
}); 
+0

Привет, Спасибо за ответ. При двойном нажатии кнопки управление сначала переходит к части одного щелчка, а затем переходит к двойному щелчку. Но я дважды нажимаю. – Sangeetha

+0

Примите мой вопрос –

+0

как один, так и двойной кран для кнопки не работает с использованием вашего кода. – Sangeetha

0

Привет Я нашел решение как одного крана и двойное нажатие будет работать на одном экране с помощью onSingleTapConfirmed, как показано ниже,

public class OnSwipeTouchListener implements View.OnTouchListener { 

private GestureDetector gestureDetector; 

public OnSwipeTouchListener(Context c) { 
    gestureDetector = new GestureDetector(c, new GestureListener()); 
} 

public boolean onTouch(final View view, final MotionEvent motionEvent) { 
    return gestureDetector.onTouchEvent(motionEvent); 
} 

private final class GestureListener extends GestureDetector.SimpleOnGestureListener { 

    private static final int SWIPE_THRESHOLD = 100; 
    private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 

     return super.onSingleTapUp(e); 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     onClick(); 
     return super.onSingleTapConfirmed(e); 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     onDoubleClick(); 
     return super.onDoubleTap(e); 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     onLongClick(); 
     super.onLongPress(e); 
    } 

    // Determines the fling velocity and then fires the appropriate swipe event accordingly 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     boolean result = false; 
     try { 
      float diffY = e2.getY() - e1.getY(); 
      float diffX = e2.getX() - e1.getX(); 
      if (Math.abs(diffX) > Math.abs(diffY)) { 
       if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
        if (diffX > 0) { 
         onSwipeRight(); 
        } else { 
         onSwipeLeft(); 
        } 
       } 
      } else { 
       if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
        if (diffY > 0) { 
         onSwipeDown(); 
        } else { 
         onSwipeUp(); 
        } 
       } 
      } 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
     return result; 
    } 
} 

public void onSwipeRight() { 
} 

public void onSwipeLeft() { 
} 

public void onSwipeUp() { 
} 

public void onSwipeDown() { 
} 

public void onClick() { 

} 

public void onDoubleClick() { 

} 

public void onLongClick() { 

}} 

затем реализовать этот класс, как показано ниже,

btn.setOnTouchListener(new OnSwipeTouchListener(adapter.getContext()) { 

     @Override 
     public void onClick() { 
      super.onClick(); 
      AlertUtils.showToast(adapter.getContext(),"single tap"); 
      // your on click here 
     } 

     @Override 
     public void onDoubleClick() { 
      super.onDoubleClick(); 
      // your on onDoubleClick here 
     } 

     @Override 
     public void onLongClick() { 
      super.onLongClick(); 
      // your on onLongClick here 
     } 

     @Override 
     public void onSwipeUp() { 
      super.onSwipeUp(); 
      // your swipe up here 
     } 

     @Override 
     public void onSwipeDown() { 
      super.onSwipeDown(); 
      // your swipe down here. 
     } 

     @Override 
     public void onSwipeLeft() { 
      super.onSwipeLeft(); 
      // your swipe left here. 
     } 

     @Override 
     public void onSwipeRight() { 
      super.onSwipeRight(); 
      // your swipe right here. 
     } 
    }); 

Счастливое кодирование ..