public override bool OnInterceptTouchEvent(MotionEvent ev)
{
MotionEventActions action = ev.Action;
bool intercept = false;
switch (action)
{
case MotionEventActions.Move:
if (mTouchState == TOUCH_STATE_HORIZONTAL_SCROLLING)
intercept = true;
else if (mTouchState == TOUCH_STATE_VERTICAL_SCROLLING)
intercept = false;
else
{
float x = ev.GetX();
int xDiff = (int)Math.Abs(x - mLastMotionX);
bool xMoved = xDiff > mTouchSlop;
if (xMoved)
{
mTouchState = TOUCH_STATE_HORIZONTAL_SCROLLING;
mLastMotionX = x;
}
float y = ev.GetY();
int yDiff = (int)Math.Abs(y - mLastMotionY);
bool yMoved = yDiff > mTouchSlop;
if (yMoved)
mTouchState = TOUCH_STATE_VERTICAL_SCROLLING;
}
break;
case MotionEventActions.Cancel:
mTouchState = TOUCH_STATE_REST;
break;
case MotionEventActions.Up:
mTouchState = TOUCH_STATE_REST;
break;
case MotionEventActions.Down:
mLastMotionX = ev.GetX();
mLastMotionY = ev.GetY();
break;
default:
break;
}
return intercept;
}