To answer the first part of your question - if the touch listener is consuming the event before it reaches view_two (the underneath view), it may be because you are consuming the touch event in your onTouchListener.
//Returns true if the listener has consumed the event, false otherwise.
public abstract boolean onTouch (View v, MotionEvent event)
Are you always returning false in this method? If not, there are events that probably won't get propagated to the next view in the hierarchy.
As for your second question - yes, you certainly can create an onTouchListener to handle all of these events. Here's an example that does short and long press (independent of how much movement there is):
private MotionEvent downEvent;
public abstract boolean onTouch (View v, MotionEvent event){
if (downEvent == null && event.getAction == MotionEvent.ACTION_DOWN){
downEvent = event;
return false;
}
if (event.getAction == MotionEvent.ACTION_UP){
if (event.getDownTime() > LONG_PRESS_THRESHOLD){
... do something ...
} else if (event.getDownTime() > SHORT_PRESS_THRESHOLD){
... do something else ...
}
}
}
As you can imagine, it will only take a bit more effort lines to determine if the delta X / delta Y between your down event and current event meets the threshold you determine for events 3 and 4.