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(); }
void OnUp(GestureMotionEvent e) { NumberOfTouches = e.PointerCount; var tookTooLong = (DateTime.Now - _startTime).Milliseconds > MaxSwipeDuration; var wrongAmountOfTouches = NumberOfTouches < SwipeGestureRecognizer.NumberOfTouchesRequired; if (tookTooLong || wrongAmountOfTouches) { State = GestureRecognizerState.Failed; SendGestureEvent(); PointerId = -1; return; } var endTouchPoint = new Xamarin.Forms.Point(e.GetX(0), e.GetY(0)); double velocityX = endTouchPoint.X - FirstTouchPoint.X; double velocityY = endTouchPoint.Y - FirstTouchPoint.Y; var direction = GetSwipeDirection(velocityX, velocityY); var expectedDirection = (Recognizer as SwipeGestureRecognizer).Direction; if (direction == expectedDirection) { State = GestureRecognizerState.Recognized; SendGestureEvent(); } else { State = GestureRecognizerState.Failed; Console.WriteLine("failed gesture was expecting {0} got {1}", expectedDirection, direction); } PointerId = -1; }
internal override void ProcessMotionEvent(GestureMotionEvent e) { if (e.ActionMasked == MotionEventActions.Down && PointerId == -1) { OnDown(e); e.IsConsumed = true; e.IsCancelled = Recognizer.CancelsTouchesInView; } else if (State == GestureRecognizerState.Cancelled || State == GestureRecognizerState.Ended || State == GestureRecognizerState.Failed) { return; } else { var xMovement = Math.Abs(e.GetX(0) - FirstTouchPoint.X); var yMovement = Math.Abs(e.GetY(0) - FirstTouchPoint.Y); var isMovedBeyondMaxDistance = xMovement > LongPressGestureRecognizer.MaxDistanceTolerance || yMovement > LongPressGestureRecognizer.MaxDistanceTolerance; Console.WriteLine("isMovedBeyondMaxDistance {0} xd {1} yd{2}", isMovedBeyondMaxDistance, xMovement, yMovement); if (e.ActionMasked == MotionEventActions.Cancel || isMovedBeyondMaxDistance) { State = GestureRecognizerState.Cancelled; Console.WriteLine("LONG PRESS CANCELLED"); PointerId = -1; SendGestureUpdate(); } else if (e.ActionMasked == MotionEventActions.Up) { OnUp(e); e.IsConsumed = true; } } }
void OnDown(GestureMotionEvent e) { //TODO - should really be possible until all taps/fingers are satisfied. State = GestureRecognizerState.Began; // State = (e.PointerCount == SwipeGestureRecognizer.NumberOfTouchesRequired) ? GestureRecognizerState.Began : GestureRecognizerState.Failed; FirstTouchPoint = new Xamarin.Forms.Point(e.GetX(0), e.GetY(0)); _startTime = DateTime.Now; }
void OnDown (GestureMotionEvent e) { //TODO - should really be possible until all taps/fingers are satisfied. State = GestureRecognizerState.Began; // State = (e.PointerCount == SwipeGestureRecognizer.NumberOfTouchesRequired) ? GestureRecognizerState.Began : GestureRecognizerState.Failed; FirstTouchPoint = new Xamarin.Forms.Point (e.GetX (0), e.GetY (0)); _startTime = DateTime.Now; }
void OnDown (GestureMotionEvent e) { //TODO - should really be possible until all taps/fingers are satisfied. State = (e.PointerCount == TapGestureRecognizer.NumberOfTouchesRequired) ? GestureRecognizerState.Began : GestureRecognizerState.Failed; _currentTapCount = 0; //TODO track all pointers that are down. PointerId = e.GetPointerId (0); FirstTouchPoint = new Xamarin.Forms.Point (e.GetX (0), e.GetY (0)); if (TapGestureRecognizer.NumberOfTapsRequired > 1 && State == GestureRecognizerState.Began) { ResetMultiTapTimer (true); } }
void OnDown (GestureMotionEvent e) { //TODO - should really be possible until all taps/fingers are satisfied. if (e.PointerCount == LongPressGestureRecognizer.NumberOfTouchesRequired) { State = GestureRecognizerState.Began; PointerId = e.GetPointerId (0); FirstTouchPoint = new Xamarin.Forms.Point (e.GetX (0), e.GetY (0)); ResetLongPressTimer (true); } else { State = GestureRecognizerState.Failed; } }
void OnDown(GestureMotionEvent e) { //TODO - should really be possible until all taps/fingers are satisfied. State = (e.PointerCount == TapGestureRecognizer.NumberOfTouchesRequired) ? GestureRecognizerState.Began : GestureRecognizerState.Failed; _currentTapCount = 0; //TODO track all pointers that are down. PointerId = e.GetPointerId(0); FirstTouchPoint = new Xamarin.Forms.Point(e.GetX(0), e.GetY(0)); if (TapGestureRecognizer.NumberOfTapsRequired > 1 && State == GestureRecognizerState.Began) { ResetMultiTapTimer(true); } }
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); }
void OnDown(GestureMotionEvent e) { //TODO - should really be possible until all taps/fingers are satisfied. if (e.PointerCount == LongPressGestureRecognizer.NumberOfTouchesRequired) { State = GestureRecognizerState.Began; PointerId = e.GetPointerId(0); FirstTouchPoint = new Xamarin.Forms.Point(e.GetX(0), e.GetY(0)); ResetLongPressTimer(true); } else { State = GestureRecognizerState.Failed; } }
void OnUp (GestureMotionEvent e) { NumberOfTouches = e.PointerCount; var tookTooLong = (DateTime.Now - _startTime).Milliseconds > MaxSwipeDuration; var wrongAmountOfTouches = NumberOfTouches < SwipeGestureRecognizer.NumberOfTouchesRequired; if (tookTooLong || wrongAmountOfTouches) { State = GestureRecognizerState.Failed; return; } var endTouchPoint = new Xamarin.Forms.Point (e.GetX (0), e.GetY (0)); double velocityX = endTouchPoint.X - FirstTouchPoint.X; double velocityY = endTouchPoint.Y - FirstTouchPoint.Y; var direction = GetSwipeDirection (velocityX, velocityY); var expectedDirection = (Recognizer as SwipeGestureRecognizer).Direction; if (direction == expectedDirection) { State = GestureRecognizerState.Recognized; } else { State = GestureRecognizerState.Failed; Console.WriteLine ("failed gesture was expecting {0} got {1}", expectedDirection, direction); } }
internal override void ProcessMotionEvent (GestureMotionEvent e) { if (e.ActionMasked == MotionEventActions.Down && PointerId == -1) { OnDown (e); // e.IsConsumed = true; e.IsCancelled = Recognizer.CancelsTouchesInView; } else if (State == GestureRecognizerState.Cancelled || State == GestureRecognizerState.Ended || State == GestureRecognizerState.Failed) { return; } else { var xMovement = Math.Abs (e.GetX (0) - FirstTouchPoint.X); var yMovement = Math.Abs (e.GetY (0) - FirstTouchPoint.Y); var isMovedBeyondMaxDistance = xMovement > LongPressGestureRecognizer.MaxDistanceTolerance || yMovement > LongPressGestureRecognizer.MaxDistanceTolerance; Console.WriteLine ("isMovedBeyondMaxDistance {0} xd {1} yd{2}", isMovedBeyondMaxDistance, xMovement, yMovement); if (e.ActionMasked == MotionEventActions.Cancel || isMovedBeyondMaxDistance) { State = GestureRecognizerState.Cancelled; Console.WriteLine ("LONG PRESS CANCELLED"); } else if (e.ActionMasked == MotionEventActions.Up) { OnUp (e); // e.IsConsumed = true; } } }
void OnMove(GestureMotionEvent e) { _currentScreenPoint = new Xamarin.Forms.Point(e.GetX(), e.GetY()); var currentViewPosition = Recognizer.View.GetNativeScreenPosition(); var currentViewOffset = new Xamarin.Forms.Point(currentViewPosition.X - _viewStartLocation.X, currentViewPosition.Y - _viewStartLocation.Y); var eventPoint = new Xamarin.Forms.Point(e.GetX() + currentViewOffset.X, e.GetY() + currentViewOffset.Y); // Console.WriteLine ("ePoint {0} cvp {1} voffset {2} csp {3}", eventPoint.PrettyPrint (), currentViewPosition.PrettyPrint (), currentViewOffset.PrettyPrint (), _currentScreenPoint.PrettyPrint ()); if (State == GestureRecognizerState.Possible || State == GestureRecognizerState.Began || State == GestureRecognizerState.Changed) { // // 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; // } else 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); if (State == GestureRecognizerState.Possible && !IsMoveSufficientToBegin(_currentScreenPoint)) { Console.WriteLine("not moved enough - not starting"); return; } //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.PrettyPrint () + " _currentPoint" + _currentPoint.PrettyPrint () + "rt " + _rawTranslation.PrettyPrint ()); } }
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); FirstTouchPoint = new Xamarin.Forms.Point (e.GetX (), e.GetY ()); _currentPoint = FirstTouchPoint; _currentScreenPoint = FirstTouchPoint; _previousPoint = FirstTouchPoint; _viewStartLocation = Recognizer.View.GetNativeScreenPosition (); }
void OnMove (GestureMotionEvent e) { _currentScreenPoint = new Xamarin.Forms.Point (e.GetX (), e.GetY ()); var currentViewPosition = Recognizer.View.GetNativeScreenPosition (); var currentViewOffset = new Xamarin.Forms.Point (currentViewPosition.X - _viewStartLocation.X, currentViewPosition.Y - _viewStartLocation.Y); var eventPoint = new Xamarin.Forms.Point (e.GetX () + currentViewOffset.X, e.GetY () + currentViewOffset.Y); // Console.WriteLine ("ePoint {0} cvp {1} voffset {2} csp {3}", eventPoint.PrettyPrint (), currentViewPosition.PrettyPrint (), currentViewOffset.PrettyPrint (), _currentScreenPoint.PrettyPrint ()); if (State == GestureRecognizerState.Possible || State == GestureRecognizerState.Began || State == GestureRecognizerState.Changed) { // // 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; // } else 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); if (State == GestureRecognizerState.Possible && !IsMoveSufficientToBegin (_currentScreenPoint)) { Console.WriteLine ("not moved enough - not starting"); return; } //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.PrettyPrint () + " _currentPoint" + _currentPoint.PrettyPrint () + "rt " + _rawTranslation.PrettyPrint ()); } }