2014-01-22 3 views
1

Log никогда не войти ACTION_UP или ACTION_MOVE (который я извлекал из примера кода для укорачивания)ACTION_UP и ACTION_MOVE onInterceptTouchEvent никогда не вызываются

Вот мой укоротить версия кода:

public class ProfileBadgeView extends LinearLayout { 

    Activity act; 

    public ProfileBadgeView(Context context) { 
     super(context); 
    } 

    public ProfileBadgeView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public ProfileBadgeView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void initView(Activity act) { 
     //..init 
    } 


    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 

     if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
      logIntercept("ACTION DOWN"); 
     } else if (ev.getAction() == MotionEvent.ACTION_UP) { 
      logIntercept("ACTION_UP"); 
     } 
     return false; 
    } 

    @Override 
     public boolean onTouchEvent(MotionEvent ev) { 
     return true; 
} 


    private void logIntercept(Object obj) { 
     Log.i(this.getClass().getSimpleName() + " INTERCEPT :", obj.toString()); 
    } 



} 
+0

Помещенный Тост вне условий и проверьте, отображается ли тост –

ответ

8

Ваш onInterceptTouchEvent метод не вызывается после ACTION_DOWN событие, потому что вы возвращаете true в onTouchEvent метод. Таким образом, все остальные события отправляются в onTouchEvent, а не в onInterceptTouchEvent больше:

Используя эту функцию берет какую-то помощь, так как она имеет довольно сложный взаимодействие с View.onTouchEvent (MotionEvent), и его использование требует реализуя этот метод, а также этот правильный. Мероприятия будут приниматься в следующем порядке:

Вы получите здесь мероприятие вниз. Событие down будет обработано либо дочерним элементом этой группы представлений, либо предоставлено вашему методу onTouchEvent() для обработки; это означает, что вы должны реализовать onTouchEvent(), чтобы вернуть true, поэтому вы продолжите просмотр остальной части жестов (вместо поиска родительского представления для его обработки). Кроме того, , вернув true из onTouchEvent(), вы не получите следующих событий в onInterceptTouchEvent(), и вся обработка касания должна произойти в onTouchEvent(), как обычно,.

http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)

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