Ненавижу отвечать на свой вопрос, но наконец-то понял.По сути, вы должны перехватить события касания, которые отправляет действие.Затем в функции перехвата вы можете определить, какие сенсорные события вы хотите обработать, и какие события вы хотите пропустить через Activity и другие дочерние элементы.
Вот то, что у меня было, что позволило мне захватить «свайп»"или" бросить "события, пропуская все другие события касания (например, он позволяет прокручивать вверх и вниз, длительное нажатие, события нажатия кнопки).
MotionEvent _downMotionEvent;
/**
* This function intercepts all the touch events.
* In here we decide what to pass on to child items and what to handle ourselves.
*
* @param motionEvent - The touch event that occured.
*/
@Override
public boolean dispatchTouchEvent(MotionEvent motionEvent){
if (_debug) Log.v("NotificationActivity.dispatchTouchEvent()");
NotificationViewFlipper notificationViewFlipper = getNotificationViewFlipper();
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:{
//Keep track of the starting down-event.
_downMotionEvent = MotionEvent.obtain(motionEvent);
break;
}
case MotionEvent.ACTION_UP:{
//Consume if necessary and perform the fling / swipe action
//if it has been determined to be a fling / swipe
float deltaX = motionEvent.getX() - _downMotionEvent.getX();
final ViewConfiguration viewConfiguration = ViewConfiguration.get(_context);
if(Math.abs(deltaX) > viewConfiguration.getScaledTouchSlop()*2){
if (deltaX < 0){
//Do work here for right direction swipes.
return true;
}else if (deltaX > 0){
//Do work here for left direction swipes.
return true;
}
}
break;
}
}
return super.dispatchTouchEvent(motionEvent);
}
Я надеюсь, что это поможет любому, кто столкнулсяаналогичная проблема.