Как мы можем имитировать длительное нажатие на сенсорное событие? или как мы можем рассчитать время прикосновения к экрану, все в состоянии ACTION_DOWN?
Имитация длительного нажатия событиями Touch
Ответы (4)
Наконец-то я реализовал долгий щелчок по сенсорному экрану, спасибо всем:
textView.setOnTouchListener(new View.OnTouchListener() {
private static final int MIN_CLICK_DURATION = 1000;
private long startClickTime;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
longClickActive = false;
break;
case MotionEvent.ACTION_DOWN:
if (longClickActive == false) {
longClickActive = true;
startClickTime = Calendar.getInstance().getTimeInMillis();
}
break;
case MotionEvent.ACTION_MOVE:
if (longClickActive == true) {
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (clickDuration >= MIN_CLICK_DURATION) {
Toast.makeText(MainActivity.this, "LONG PRESSED!",Toast.LENGTH_SHORT).show();
longClickActive = false;
}
}
break;
}
return true;
}
});
в котором private boolean longClickActive = false;
является переменной класса.
person
Soheil Setayeshi
schedule
27.07.2013
Спасибо, это привело к решению для меня.
- person ctapp1; 27.03.2015
проблема в том, что долгое нажатие ожидает ACTION_MOVE, которое иногда не вызывается, но длинное нажатие должно быть зафиксировано
- person sadegh saati; 05.06.2015
Для подсчета количества касаний вы можете получить getPointerCount() вашего события, например здесь
и для длинного щелчка, возможно, это помогает
Изменить: и надеюсь, что эта ссылка поможет вы определяете продолжительность контакта
person
Arash GM
schedule
27.07.2013
Мне нужно время, не считая, чувак.
- person Soheil Setayeshi; 27.07.2013
может быть, я не мог вас хорошо понять, поэтому надеюсь, что отредактированный ответ и прикрепленная ссылка помогут вам больше, удачи
- person Arash GM; 27.07.2013
Это не был полностью мой ответ, но он вдохновил меня на использование логических флагов. спасибо :D
- person Soheil Setayeshi; 27.07.2013
Попробуй это. Вам не нужно искать хак для этого.
final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
});
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
}
return true;
}
};
person
guptaatul91
schedule
29.11.2017
Вы должны подсчитать время между событиями ACTION_DOWN и ACTION_UP. Невозможно рассчитать это время только в состоянии ACTOIN_DOWN, потому что это событие START из последовательности событий, представляющих событие TAP или LONG TAP.
person
Sergey Brazhnik
schedule
27.07.2013
Спасибо, я сделал это, используя ACTION_DOWN и ACTION_MOVE.
- person Soheil Setayeshi; 27.07.2013