public override bool OnInterceptTouchEvent(MotionEvent ev)
{
var action = MotionEventCompat.GetActionMasked(ev);
if (!_canSlide || !SlidingEnabled || (_isUnableToDrag && action != (int) MotionEventActions.Down))
{
_dragHelper.Cancel();
return base.OnInterceptTouchEvent(ev);
}
if (action == (int) MotionEventActions.Cancel || action == (int) MotionEventActions.Up)
{
_dragHelper.Cancel();
return false;
}
var x = ev.GetX();
var y = ev.GetY();
var interceptTap = false;
switch (action)
{
case (int)MotionEventActions.Down:
_isUnableToDrag = false;
_initialMotionX = x;
_initialMotionY = y;
if (IsDragViewUnder((int) x, (int) y) && !IsUsingDragViewTouchEvents)
interceptTap = true;
break;
case (int)MotionEventActions.Move:
var adx = Math.Abs(x - _initialMotionX);
var ady = Math.Abs(y - _initialMotionY);
var dragSlop = _dragHelper.TouchSlop;
if (IsUsingDragViewTouchEvents)
{
if (adx > _scrollTouchSlop && ady < _scrollTouchSlop)
return base.OnInterceptTouchEvent(ev);
if (ady > _scrollTouchSlop)
interceptTap = IsDragViewUnder((int) x, (int) y);
}
if ((ady > dragSlop && adx > ady) || !IsDragViewUnder((int) x, (int) y))
{
_dragHelper.Cancel();
_isUnableToDrag = true;
return false;
}
break;
}
var interceptForDrag = _dragHelper.ShouldInterceptTouchEvent(ev);
return interceptForDrag || interceptTap;
}