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;
        }
Пример #3
0
 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);
        }
Пример #10
0
 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;
				}
			}
		}
Пример #13
0
        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 ());
			}
		}