2013-07-27 4 views

ответ

14

я реализовал сенсорный экран долго нажмите наконец, ТНХ все:

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; является переменной класса.

+2

Спасибо, что привело к решению для меня. – ctapp1

+0

проблема в длинном отводе ждет ACTION_MOVE, который иногда не вызывается, но длинный кран должен быть захвачен –

2

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

и Лонг-клик возможно this помогает

Редактировать: и надеюсь this link поможет вам определить получение длительности касания

+0

Мне нужно время, чтобы не считать чувака. –

+1

Возможно, я не мог понять вас хорошо, поэтому надеюсь, что отредактированный ответ и прикрепленная ссылка помогут вам больше, удачи –

+0

Это был не совсем мой ответ, но вдохновил меня использованием булевых флагов. thx: D –

1

Вы должны подсчитать время между событиями ACTION_DOWN и ACTION_UP. Это невозможно вычислить этот раз только в ACTOIN_DOWN состоянии, потому что это START событие последовательности событий, представляющих TAP события LONG TAP

+0

Thx, я сделал это с помощью ACTION_DOWN и ACTION_MOVE. –

1

Попробуйте это. Вам не нужно искать взломать это.

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; 
} 
}; 
Смежные вопросы