void OnDown(GestureMotionEvent e) { //TODO - really should be possible at this point - min distance should trigger began State = GestureRecognizerState.Possible; PointerId = e.GetPointerId(0); Console.WriteLine("PAN POSSIBLE"); _rawTranslation = new Xamarin.Forms.Point(0, 0); _currentPoint = new Xamarin.Forms.Point(e.GetX(), e.GetY()); _currentScreenPoint = new Xamarin.Forms.Point(e.GetX(), e.GetY()); _previousPoint = new Xamarin.Forms.Point(e.GetX(), e.GetY()); _startPoint = new Xamarin.Forms.Point(NativeView.GetX(), NativeView.GetY()); SendGestureEvent(); }
bool OnMove(GestureMotionEvent e) { _currentScreenPoint = new Xamarin.Forms.Point(e.GetX(), e.GetY()); var currentViewPosition = new Xamarin.Forms.Point(NativeView.GetX(), NativeView.GetY()); var currentViewOffset = new Xamarin.Forms.Point(currentViewPosition.X - _startPoint.X, currentViewPosition.Y - _startPoint.Y); var eventPoint = new Xamarin.Forms.Point(e.GetX() + currentViewOffset.X, e.GetY() + currentViewOffset.Y); var coords = new MotionEvent.PointerCoords(); e.GetPointerCoords(0, coords); // Console.WriteLine ("CHANGED e2{0} coords {1},{2}", eventPoint, coords.X, coords.Y); if (State != GestureRecognizerState.Possible && State != GestureRecognizerState.Began && State != GestureRecognizerState.Changed) { return(false); } if (e.GetX() < 0 || e.GetX() > NativeView.Width || e.GetY() < 0 || e.GetY() > NativeView.Height) { Console.WriteLine("Gesture exited from view - it's over"); State = GestureRecognizerState.Ended; PointerId = -1; SendGestureEvent(); return(false); } if (e.ActionMasked == MotionEventActions.Move || e.ActionMasked == MotionEventActions.Scroll) { _previousPoint = _currentPoint; _currentPoint = eventPoint; _velocity = new Xamarin.Forms.Point(_currentPoint.X - _previousPoint.X, _currentPoint.Y - _previousPoint.Y); //TODO proper conversion _rawTranslation.X += _velocity.X / 2; _rawTranslation.Y += _velocity.Y / 2; State = State == GestureRecognizerState.Possible ? GestureRecognizerState.Began : GestureRecognizerState.Changed; e.IsCancelled = Recognizer.CancelsTouchesInView; } // Console.WriteLine ("State " + State + "_previousPoint " + _previousPoint + " _currentPoint" + _currentPoint); SendGestureEvent(); return(false); }