Esempio n. 1
0
        bool OnPinched(MotionEvent ev, MotionEvent.PointerCoords[] coords)
        {
            //if (_debugEvents) System.Diagnostics.Debug.WriteLine("onPinched [{0}]", _id);
            StopTapLongPress();
            _pinching = true;

            var _view = (Android.Views.View)_weakReferenceView?.Get();

            if (_view == null || _listeners == null || !_listeners.Any())
            {
                return(false);
            }

            bool handled = false;

            if (_previousPinchArgs != null)
            {
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching || listener.HandlesPinched)
                    {
                        PinchEventArgs args = new AndroidPinchEventArgs(ev, coords, _previousPinchArgs, _view, _viewLocationAtOnDown);
                        args.Listener = listener;
                        listener.OnPinched(args);
                        handled |= args.Handled;
                        //if (args.Handled)
                        //	break;
                    }
                }
                _previousPinchArgs = null;
            }
            return(handled);
        }
Esempio n. 2
0
 public iOSPinchEventArgs(UIGestureRecognizer gr, PinchEventArgs previous, CoreGraphics.CGPoint locationAtStart)
 {
     Cancelled    = (gr.State == UIGestureRecognizerState.Cancelled || gr.State == UIGestureRecognizerState.Failed);
     ViewPosition = iOSEventArgsHelper.GetViewPosition(gr.View.Frame);
     Touches      = iOSEventArgsHelper.GetTouches(gr, 2, previous, locationAtStart);
     base.CalculateScales(previous);
 }
Esempio n. 3
0
 public iOSPinchEventArgs(UIGestureRecognizer gr, PinchEventArgs previous)
 {
     Cancelled       = (gr.State == UIGestureRecognizerState.Cancelled || gr.State == UIGestureRecognizerState.Failed);
     ElementPosition = gr.View.BoundsInFormsCoord();
     ElementTouches  = iOSEventArgsHelper.GetTouches(gr, gr.View, 2, previous);
     WindowTouches   = iOSEventArgsHelper.GetTouches(gr, null, 2, previous);
     CalculateScales(previous);
 }
Esempio n. 4
0
        /// <summary>
        /// [メソッド]
        /// ピンチイベントハンドラを実行する
        /// </summary>
        /// <param name="e">イベントデータ</param>
        protected virtual void OnPinch(PinchEventArgs e)
        {
            this.hasPinched = true;

            if (Pinch != null)
            {
                Pinch(this, e);
            }
        }
Esempio n. 5
0
    private void FirePinchEvent(float dist_diff)
    {
        var args = new PinchEventArgs(trackedFinger1, trackedFinger2, dist_diff);

        if (onPinchSpread != null)
        {
            onPinchSpread(this, args);
        }
    }
        private void CanvasDetails_PinchStarted(object sender, PinchEventArgs args)
        {
            args.Handled = true;

            this.pinchStartWidth = (int)this.imageDetails.Width;
            this.pinchStartHeight = (int)this.imageDetails.Height;

            this.RaiseGestureChanged("Pinch");
        }
        private string PinchInfo(string eventName, PinchEventArgs e)
        {
            StringBuilder sb = new StringBuilder(eventName);

            sb.Append($" {GetElementName(e)} with {e.NumberOfTouches} fingers");
            sb.Append($", DeltaScale = {e.DeltaScale:F}");
            sb.Append($", Center =  {e.Center.X:F}/{e.Center.Y:F}");
            AddTouches(sb, e);

            return(sb.ToString());
        }
        void OnPinching(object sender, PinchEventArgs e)
        {
            if (e.State == GestureState.Ended)
            {
                DisplayAlert("Pinched", $"You pinched.", "OK");
                GestureStatus.Text = "";
                return;
            }

            GestureStatus.Text = $"{e.Scale},{e.Origin}";
        }
Esempio n. 9
0
        private string PinchInfo(string eventName, PinchEventArgs e)
        {
            StringBuilder sb = new StringBuilder(eventName);

            sb.Append($" {GetElementName(e)} with {e.NumberOfTouches} fingers\n");
            sb.Append($"  DeltaScale = {e.DeltaScale:F}");
            sb.Append($", DeltaScaleX = {e.DeltaScaleX:F}");
            sb.Append($", DeltaScaleY = {e.DeltaScaleY:F}\n");
            sb.Append($"  TotalScale = {e.TotalScale:F}");
            sb.Append($", TotalScaleX = {e.TotalScaleX:F}");
            sb.Append($", TotalScaleY = {e.TotalScaleY:F}\n");
            sb.Append($"  Center =  {e.Center.X:F}/{e.Center.Y:F}");
            AddTouches(sb, e);
            if (e.Cancelled)
            {
                sb.Append(", Cancelled=true");
            }

            return(sb.ToString());
        }
Esempio n. 10
0
        /// <summary>
        /// [内部メソッド]
        /// 「ピンチ」イベントを実行する
        /// </summary>
        /// <param name="touchPoint1">接触点1</param>
        /// <param name="touchPoint2">接触点2</param>
        private void executePinchEvent(TouchPoint touchPoint1, TouchPoint touchPoint2)
        {
            // 接触点1と接触点2の距離から「ピンチ」イベントハンドラを実行するか
            int distance = Calculator.CalcurateDistance(touchPoint1.X, touchPoint1.Y, touchPoint2.X, touchPoint2.Y);

            if (Math.Abs(this.baseTwoTouchDistanceCentiPixel - distance) < pinchIntervalCentiPixel)
            {
                return;
            }

            // 接触点1と接触点2の角度を計算する
            int angle = Calculator.CalculateAngle(touchPoint1.X, touchPoint1.Y, touchPoint2.X, touchPoint2.Y);

            // 基準となる距離と接触点1,2の距離からピンチ区分を決定する
            PinchType type = Calculator.DistanceToPinchType(this.baseTwoTouchDistanceCentiPixel, distance);

            // 「ピンチ」イベントハンドラを実行する
            var pinchData = new PinchData(touchPoint1, touchPoint2, angle, this.baseTwoTouchDistanceCentiPixel, distance, type);
            var peArgs    = new PinchEventArgs(pinchData);

            OnPinch(peArgs);
            this.baseTwoTouchDistanceCentiPixel = distance;
        }
Esempio n. 11
0
    private void OnPinchSpread(object sender, PinchEventArgs e)
    {
        float scale = e.DistanceDiff / Screen.dpi * scaleSpeed;

        Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize + scale, 5, 8.4f);
    }
        void OnPinchAndRotate(UIGestureRecognizer gr)
        {
            if (touchCount == 0)
            {
                touchCount++;
            }

            PinchEventArgs  pinchEventArgs  = new iOSPinchEventArgs(gr, _previousPinchArgs);
            RotateEventArgs rotateEventArgs = new iOSRotateEventArgs(gr, _previousRotateArgs);

            if (gr.State == UIGestureRecognizerState.Ended || gr.State == UIGestureRecognizerState.Cancelled || gr.State == UIGestureRecognizerState.Failed)
            {
                if (_previousPinchArgs == null && _previousRotateArgs == null)
                {
                    return;
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching || listener.HandlesPinched)
                    {
                        pinchEventArgs.Listener = listener;
                        listener.OnPinched(pinchEventArgs);
                        if (pinchEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesRotating || listener.HandlesRotated)
                    {
                        rotateEventArgs.Listener = listener;
                        listener.OnRotated(rotateEventArgs);
                        if (rotateEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                _previousPinchArgs  = null;
                _previousRotateArgs = null;
                _pinching           = false;
                _rotating           = false;
                _panning            = false;
                _longPressing       = false;
            }
            else
            {
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching)
                    {
                        pinchEventArgs.Listener = listener;
                        listener.OnPinching(pinchEventArgs);
                        if (pinchEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesRotating)
                    {
                        rotateEventArgs.Listener = listener;
                        listener.OnRotating(rotateEventArgs);
                        if (rotateEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                _previousPinchArgs  = pinchEventArgs;
                _previousRotateArgs = rotateEventArgs;
            }
        }
 private void CanvasDetails_PinchFinished(object sender, PinchEventArgs args)
 {
     args.Handled = true;
 }
        private void CanvasDetails_Pinch(object sender, PinchEventArgs args)
        {
            args.Handled = true;

            this.DoPinch(args.Factor);
        }
 protected virtual void OnPinched(PinchEventArgs e)
 {
     AddText(PinchInfo("Pinched", e));
 }
		protected virtual void OnPinched(PinchEventArgs e)
		{
			AddText("Pinched " + GetElementName(e) + " with " + e.NumberOfTouches + " fingers, scale=" + e.DeltaScale + ", Center =" + e.Center.X + "/" + e.Center.Y);
		}
Esempio n. 17
0
 protected virtual void OnPinching(PinchEventArgs e)
 {
     //AddText(PinchInfo("Pinching", e));
 }
        void OnPinchAndRotate(UIGestureRecognizer gr)
        {
            PinchEventArgs  pinchEventArgs  = new iOSPinchEventArgs(gr, _previousPinchArgs, _viewLocationAtOnDown);
            RotateEventArgs rotateEventArgs = new iOSRotateEventArgs(gr, _previousRotateArgs, _viewLocationAtOnDown);

            if (touchCount == 0)
            {
                //System.Diagnostics.Debug.WriteLine("onPinchAndRotate set _viewLocationAtOnDown");
                _viewLocationAtOnDown = ViewLocationInWindow(gr.View);
                touchCount++;
            }
            bool handled = false;

            if (gr.State == UIGestureRecognizerState.Ended || gr.State == UIGestureRecognizerState.Cancelled || gr.State == UIGestureRecognizerState.Failed)
            {
                if (_previousPinchArgs == null && _previousRotateArgs == null)
                {
                    return;
                }
                foreach (var listener in _listeners)
                {
                    //if (handled)
                    //  break;
                    if (listener.HandlesPinching || listener.HandlesPinched)
                    {
                        var taskArgs = new PinchEventArgs(pinchEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnPinched(taskArgs);
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    //if (handled)
                    //  break;
                    if (listener.HandlesRotating || listener.HandlesRotated)
                    {
                        var taskArgs = new RotateEventArgs(rotateEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnRotated(taskArgs);
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                //gr.CancelsTouchesInView = handled;
                _previousPinchArgs  = null;
                _previousRotateArgs = null;
                _pinching           = false;
                _rotating           = false;
                _panning            = false;
                _longPressing       = false;
            }
            else
            {
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching)
                    {
                        var taskArgs = new PinchEventArgs(pinchEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnPinching(taskArgs);
                        handled = handled || pinchEventArgs.Handled;
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesRotating)
                    {
                        var taskArgs = new RotateEventArgs(rotateEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnRotating(taskArgs);
                        handled = handled || rotateEventArgs.Handled;
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                _previousPinchArgs  = pinchEventArgs;
                _previousRotateArgs = rotateEventArgs;
            }

            /*
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (gr.State != UIGestureRecognizerState.Ended && gr.State != UIGestureRecognizerState.Cancelled && gr.State != UIGestureRecognizerState.Failed)
             *  {
             *      if (listener.HandlesPinching)
             *      {
             *          var taskArgs = new PinchEventArgs(pinchEventArgs);
             *          taskArgs.Listener = listener;
             *          listener.OnPinching(taskArgs);
             *          handled = handled ||  pinchEventArgs.Handled;
             *          if (taskArgs.Handled)
             *              break;
             *      }
             *  }
             * }
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (gr.State != UIGestureRecognizerState.Ended && gr.State != UIGestureRecognizerState.Cancelled && gr.State != UIGestureRecognizerState.Failed)
             *  {
             *      if (listener.HandlesRotating)
             *      {
             *          var taskArgs = new RotateEventArgs(rotateEventArgs);
             *          taskArgs.Listener = listener;
             *          listener.OnRotating(taskArgs);
             *          handled = handled ||  rotateEventArgs.Handled;
             *          if (taskArgs.Handled)
             *              break;
             *      }
             *  }
             * }
             * _previousPinchArgs = pinchEventArgs;
             * _previousRotateArgs = rotateEventArgs;
             * //gr.CancelsTouchesInView = handled;
             * if (handled)
             *  return;
             * if (_previousPinchArgs == null && _previousRotateArgs == null)
             *  return;
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (listener.HandlesPinching || listener.HandlesPinched)
             *  {
             *      var taskArgs = new PinchEventArgs(pinchEventArgs);
             *      taskArgs.Listener = listener;
             *      listener.OnPinched(taskArgs);
             *      if (taskArgs.Handled)
             *          break;
             *  }
             * }
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (listener.HandlesRotating || listener.HandlesRotated)
             *  {
             *      var taskArgs = new RotateEventArgs(rotateEventArgs);
             *      taskArgs.Listener = listener;
             *      listener.OnRotated(taskArgs);
             *      if (taskArgs.Handled)
             *          break;
             *  }
             * }
             * //gr.CancelsTouchesInView = handled;
             * _previousPinchArgs = null;
             * _previousRotateArgs = null;
             * _pinching = false;
             * _rotating = false;
             * _panning = false;
             * _longPressing = false;
             */
        }
Esempio n. 19
0
 protected virtual void OnPinched(PinchEventArgs e)
 {
     AddText("Pinched " + GetElementName(e) + " with " + e.NumberOfTouches + " fingers, scale=" + e.DeltaScale + ", Center =" + e.Center.X + "/" + e.Center.Y);
 }
Esempio n. 20
0
 public AndroidPinchEventArgs(MotionEvent current, MotionEvent.PointerCoords[] coords, PinchEventArgs previous, View view, Listener listener)
 {
     Listener        = listener;
     Cancelled       = (current.Action == MotionEventActions.Cancel);
     ElementPosition = VisualElementExtensions.BoundsInWindowCoord(listener.Element);
     ElementTouches  = AndroidEventArgsHelper.GetTouches(coords, previous, view, listener);
     WindowTouches   = AndroidEventArgsHelper.GetTouches(coords, previous, view, null);
     //WindowTouches = AndroidEventArgsHelper.GetRawTouches(current);
     CalculateScales(previous);
 }
 public AndroidPinchEventArgs(MotionEvent current, MotionEvent.PointerCoords[] coords, PinchEventArgs previous, View view, int[] startLocation)
 {
     Cancelled    = (current.Action == MotionEventActions.Cancel);
     ViewPosition = AndroidEventArgsHelper.GetViewPosition(view);
     Touches      = AndroidEventArgsHelper.GetTouches(coords, previous, view, startLocation);
     CalculateScales(previous);
 }