我有一个自定义的ViewGroup,并重写了onInterceptTouchEvent()方法。它能接收到ACTION_DOWN事件,但无法接收到ACTION_MOVE事件。据我的理解,除非返回“true”,否则它应该能接收所有的MotionEvent事件。
这个ViewGroup包含两个视图,即ImageView和GridLayout。
我的拦截代码是:
@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;
}
我还有一个onTouch的代码,除了ACTION_MOVE之外都返回false;然而,它只在ACTION_DOWN被调用时被调用,因此它只返回false。