I have a custom ViewGroup with an override of onInterceptTouchEvent(). It receives ACTION_DOWN but never receives ACTION_MOVE. It is my understanding that, unless it returns "true", it should receive all MotionEvents.
The ViewGroup contains two views, an ImageView and a GridLayout.
My intercept code is:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
logD ("DDV Intercept DOWN");
break;
case MotionEvent.ACTION_POINTER_DOWN:
logD ("DDV Intercept P DOWN"); // logD: shell around Log.d()
break;
case MotionEvent.ACTION_MOVE:
logD ("DDV Intercept MOVE");
break;
case MotionEvent.ACTION_UP:
logD ("DDV Intercept UP");
break;
case MotionEvent.ACTION_POINTER_UP:
logD ("DDV Intercept P UP " + ev.getActionIndex());
break;
case MotionEvent.ACTION_CANCEL:
logD ("DDV Intercept CANCEL");
break;
default:
logD ("DDV Intercept " + (action & MotionEvent.ACTION_MASK));
}
return false;
}
I also have code for onTouch that returns false except for one case in ACTION_MOVE; however, it's called only for ACTION_DOWN is called; thus it only return false.
It's a bit more complicated than that. First of all you need to override onTouchEvent()
and handle ACTION_DOWN
and MOVE
events there too. Then the following will happen.
ACTION_DOWN
event gets dispatched to onInterceptTouchEvent()
first. You should return false
from there.ACTION_DONW
event's location in the view tree, then ACTION_DOWN
event and all follow up events get dispatched to onTouchEvent()
. You must return true
from there. Only then you will receive follow up events sent to onTouchEvent()
method. Independently on whether you return true
or false
, onInterceptTouchEvent()
will not receive any follow up events anymore.onInterceptTouchEvent()
(including ACTION_MOVE
events). You need to return true
from there, after you detected your gesture. Once you return true
from here, touchable view will receive ACTION_CANCEL
event and all further events will be dispatched to onTouchEvent()
method.Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With