public override bool OnTouchEvent(CoordinatorLayout parent, Java.Lang.Object cChild, MotionEvent ev) { var child = cChild.JavaCast <View>(); if (!child.IsShown) { return(false); } var action = ev.ActionMasked; if (_state == StateDragging && action == MotionEventActions.Down) { return(true); } // Detect scroll direction for ignoring collapsible if (_lastStableState == StateAnchorPoint && action == MotionEventActions.Move) { if (ev.GetY() > _initialY && !Collapsible) { Reset(); return(false); } } if (_viewDragHelper == null) { _viewDragHelper = ViewDragHelper.Create(parent, _dragCallback); } _viewDragHelper.ProcessTouchEvent(ev); if (action == MotionEventActions.Down) { Reset(); } // The ViewDragHelper tries to capture only the top-most View. We have to explicitly tell it // to capture the bottom sheet in case it is not captured and the touch slop is passed. if (action == MotionEventActions.Move && !_ignoreEvents && System.Math.Abs(_initialY - ev.GetY()) > _viewDragHelper.TouchSlop) { _viewDragHelper.CaptureChildView(child, ev.GetPointerId(ev.ActionIndex)); } return(!_ignoreEvents); }