Имитация длительного нажатия событиями Touch

Как мы можем имитировать длительное нажатие на сенсорное событие? или как мы можем рассчитать время прикосновения к экрану, все в состоянии ACTION_DOWN?


person Soheil Setayeshi    schedule 27.07.2013    source источник


Ответы (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
comment
Спасибо, это привело к решению для меня. - person ctapp1; 27.03.2015
comment
проблема в том, что долгое нажатие ожидает ACTION_MOVE, которое иногда не вызывается, но длинное нажатие должно быть зафиксировано - person sadegh saati; 05.06.2015

Для подсчета количества касаний вы можете получить getPointerCount() вашего события, например здесь

и для длинного щелчка, возможно, это помогает

Изменить: и надеюсь, что эта ссылка поможет вы определяете продолжительность контакта

person Arash GM    schedule 27.07.2013
comment
Мне нужно время, не считая, чувак. - person Soheil Setayeshi; 27.07.2013
comment
может быть, я не мог вас хорошо понять, поэтому надеюсь, что отредактированный ответ и прикрепленная ссылка помогут вам больше, удачи - person Arash GM; 27.07.2013
comment
Это не был полностью мой ответ, но он вдохновил меня на использование логических флагов. спасибо :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
comment
Спасибо, я сделал это, используя ACTION_DOWN и ACTION_MOVE. - person Soheil Setayeshi; 27.07.2013