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);
        }