public override bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { bool gestureHandled = false; var point1 = new Xamarin.Forms.Point(e1.GetX(), e1.GetY()); var point2 = new Xamarin.Forms.Point(e2.GetX(), e2.GetY()); if (_activePanGesture == null && Math.Abs(point1.Distance(point2)) > ScrollThreshold) { var gestureRecognizers = new List <Tuple <MycoView, IMycoGestureRecognizerController> >(); _container.GetGestureRecognizers(new Xamarin.Forms.Point(_context.FromPixels(e1.GetX()), _context.FromPixels(e1.GetY())), gestureRecognizers); foreach (var gestureRecognizer in gestureRecognizers) { var panGesture = gestureRecognizer.Item2 as IMycoPanGestureRecognizerController; if (panGesture != null) { _activePanGestureView = gestureRecognizer.Item1; _activePanGesture = panGesture; panGesture.SendPanStarted(gestureRecognizer.Item1); gestureHandled = true; break; } } } else if (_activePanGesture != null) { _activePanGesture.SendPanUpdatedWithUpdate(_activePanGestureView, _context.FromPixels(distanceX), _context.FromPixels(distanceY)); gestureHandled = true; } return(gestureHandled); }
private bool HandleUp(MotionEvent e) { foreach (var gesture in _activeGestures) { var point = new Xamarin.Forms.Point(_context.FromPixels(e.GetX()), _context.FromPixels(e.GetY())); var isCanceled = !gesture.Item1.RenderBounds.Contains(point); gesture.Item2.SendTouchUp(gesture.Item1, _context.FromPixels(e.GetX()) - gesture.Item1.RenderBounds.X, _context.FromPixels(e.GetY()) - gesture.Item1.RenderBounds.Y, isCanceled); } _activeGestures.Clear(); if (_activePanGesture != null) { if (_activePanGesture is IMycoPanGestureRecognizerController) { (_activePanGesture as IMycoPanGestureRecognizerController).SendPanCompleted(_activePanGestureView); } _activePanGesture = null; _activePanGestureView = null; return(true); } return(false); }