2015-02-02 3 views
1

У меня есть пользовательская группа ViewGroup, которая расширяет linearLayout, и эта группа представлений имеет gridView как дочерний. я хочу, чтобы mGridView щелкнул mGridView.onClickListener, вызванный и выполняемый, но обрабатывающий другие события касания (например, перемещение mGridView) в моем пользовательском представлении. Выполняется группа (onTouchEvent()). поэтому я ovveride onInterceptTouchEvent:Обращайтесь с дескриптором в родительском представлении, но обработайте событие Click в дочернем объекте

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 

    int action = ev.getAction(); 
    int y = (int) ev.getY(); 

    if(action == MotionEvent.ACTION_DOWN && y > mGridView.getTop()) //y > mGridView,getTop() checks if position of touch in mGridView Position or not. 
     return false; 

    return true; 

} 

но mGridView.OnClickListener() никогда не называется.

ответ

1

Событие клика представляет собой составное событие, оно состоит не только из MotionEvent.ACTION_DOWN.

Он должен иметь MotionEvent.ACTION_DOWN, возможно, несколько других MotionEvent.ACTION_MOVE и, наконец, MotionEvent.ACTION_UP, и все это внутри границ вашего щелкнутого представления.

Вы должны определить другие MotionEvents, чтобы «вернуть ложь» внутри метода onInterceptTouchEvent (MotionEvent ev). может быть что-то вроде:

if((action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_DOWNaction == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_UP) && y > mGridView.getTop()) 

Appart от this, который вы, наверное, уже читали, посмотрите на Detecting Common Gestures

В качестве альтернативы (но на самом деле не предполагая его) стараются не используя OnClickListener на ваш взгляд, но OnTouchListener , С вашим текущим кодом вы должны получить там MotionEvent.ACTION_DOWN, который вы сейчас возвращаете.

+0

спасибо. что является правилом действия == MotionEvent.ACTION_DOWNaction == MotionEvent.ACTION_MOVE? – mk72

+0

для обнаружения клика. Несколько действий сгруппированы. Сначала ACTION_DOWN, а затем любое действие внутри границ вашего вида, кроме ACTION_CANCEL, а затем ACTION_UP. Я думаю, что если вы разрешите ACTION_UP с ACTION_DOWN, ваш клик будет обнаружен, а OnClickListener будет работать –

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

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