Я только столкнулся с этой проблемой. Я попробовал решение выше, но оно не вполне работает на 100%, потому что мы хотим, чтобы длительное нажатие активировалось, даже если пользователь все еще удерживает палец.
Вот как я реализовал решение, используя обработчик и отложенную задачу -
В качестве примечания, я использовал аналогичную реализацию типа, но в обратном порядке, чтобы скрыть / показать элементы управления масштабированием при касании / и т.д ..
private Handler mHandler = new Handler();
private final Runnable mTask = new Runnable() {
@Override
public void run() {
// your code here
}
};
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// record the start time, start the timer
mEventStartTime = ev.getEventTime();
mHandler.postDelayed(mTask, LONG_PRESS_TIME);
} else if (ev.getAction() == MotionEvent.ACTION_UP) {
// record the end time, dont show if not long enough
mEventEndTime = ev.getEventTime();
if (mEventEndTime - mEventStartTime < LONG_PRESS_TIME) {
mHandler.removeCallbacks(mTask);
}
} else {
// moving, panning, etc .. up to you whether you want to
// count this as a long press - reset timing to start from now
mEventStartTime = ev.getEventTime();
mHandler.removeCallbacks(mTask);
mHandler.postDelayed(mTask, LONG_PRESS_TIME);
}
return super.onTouchEvent(ev);
}