2013-09-30 3 views
0

У меня возникают проблемы с попыткой заставить элемент реагировать по-другому, когда есть действие типа «щелчок» или тип «касание». Когда я нажимаю на элемент (это простой слушатель, не стоит вставлять код), он отлично выполняет действие, но полностью игнорирует действие касания. Таким образом, я мог бы связать элемент, чтобы отличить два события?Android - Элемент с событиями касания и клика

Следует ли применять слушатель к дочерним элементам представления, что действие выполнено?

Спасибо.

Редактировать

Решено!

Добавлена ​​проверка использования события касания перед его вызовом.

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
    super.dispatchTouchEvent(event); 
    if (this.onTouchEvent(event)) 
     return this.onTouchEvent(event); 
    else 
     return false; 
} 
+0

Для большинства просмотров существует 'setOnTouchListener'. Вы пробовали это? –

+0

Да, я пытался это сделать. Но он также проигнорировал событие касания, и прослушалось только событие click. – Danilo

+0

Убедитесь, что вы возвращаете true из метода onTouch, иначе вы получите только одно событие для ACTION_DOWN. –

ответ

0

Вы можете обратиться this нить за помощью, или использовать answer сразу. Удача =)

@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); 
} 
+0

Я понимаю ваш код. Но программа не выполняет метод, когда я нажимаю кнопки (с помощью OnClickListener). – Danilo

+0

можете ли вы опубликовать весь класс? Я подозреваю, что ваш слушатель установлен на классе, а не на кнопке – crazyPixel

Смежные вопросы