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); }
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); }
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); }
/// <summary> /// [メソッド] /// ピンチイベントハンドラを実行する /// </summary> /// <param name="e">イベントデータ</param> protected virtual void OnPinch(PinchEventArgs e) { this.hasPinched = true; if (Pinch != null) { Pinch(this, e); } }
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}"; }
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()); }
/// <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; }
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); }
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; */ }
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); }