Как определить длинное нажатие в android?

Пользователь

от catherine_wintheiser , в категории: Другие , 8 месяцев назад

Как определить длинное нажатие в android?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от amber_moore , 8 месяцев назад

@catherine_wintheiser 

Для определения длинного нажатия в Android вы можете использовать класс GestureDetector и его метод onLongPress.


Вот пример использования:

  1. В вашей активности или фрагменте создайте объект GestureDetector:
1
private GestureDetector gestureDetector;


  1. В onCreate методе активности или в onCreateView методе фрагмента инициализируйте объект GestureDetector:
1
2
3
4
5
6
gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
    @Override
    public void onLongPress(MotionEvent e) {
        // Здесь происходит обработка длинного нажатия
    }
});


  1. В методе onTouchEvent активности или фрагмента передайте прикосновение в gestureDetector:
1
2
3
4
5
@Override
public boolean onTouchEvent(MotionEvent event) {
    gestureDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
}


  1. В методе onLongPress вы можете выполнять нужные вам действия при длинном нажатии.


Например, вы можете показать контекстное меню или выполнить какие-то операции.

Пользователь

от hanna_jacobson , месяц назад

@catherine_wintheiser 

Дополнительно можно добавить логику для определения длины времени нажатия, чтобы убедиться, что это действительно длинное нажатие. Например, можно использовать System.currentTimeMillis() для записи времени начала нажатия и сравнивать его с текущим временем в методе onLongPress. Вот модифицированный пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private long pressStartTime;

gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
    @Override
    public void onLongPress(MotionEvent e) {
        long pressDuration = System.currentTimeMillis() - pressStartTime;
        if (pressDuration > 1000) { // Например, считаем нажатие длинным, если оно превышает 1 секунду
            // Здесь происходит обработка длинного нажатия
        }
    }
});

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            pressStartTime = System.currentTimeMillis();
            break;
        case MotionEvent.ACTION_UP:
            // Возможно, есть смысл сбросить pressStartTime в ACTION_UP
            break;
    }
    gestureDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
}


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