/// <summary> /// Computes the scaling and translation to correctly zoom around your fingers. /// </summary> private void OnPinchDelta(object sender, PinchGestureEventArgs e) { var scaleFactor = e.DistanceRatio / _oldScaleFactor; if (!IsScaleValid(scaleFactor)) { return; } var currentFinger1 = e.GetPosition(CameraImage, 0); var currentFinger2 = e.GetPosition(CameraImage, 1); var translationDelta = GetTranslationDelta( currentFinger1, currentFinger2, _oldFinger1, _oldFinger2, ImagePosition, scaleFactor); _oldFinger1 = currentFinger1; _oldFinger2 = currentFinger2; _oldScaleFactor = e.DistanceRatio; UpdateImageScale(scaleFactor); UpdateImagePosition(translationDelta); }
/// <summary> /// Computes the scaling and translation to correctly zoom around your fingers. /// </summary> private void OnPinchDelta(object sender, PinchGestureEventArgs e) { var scaleFactor = e.DistanceRatio / _oldScaleFactor; if (totalImageScale * scaleFactor < 1) { isRestore = true; } else { isRestore = false; if (totalImageScale * scaleFactor > MAX_IMAGE_ZOOM) { return; } } var currentFinger1 = e.GetPosition(FileImage, 0); var currentFinger2 = e.GetPosition(FileImage, 1); var translationDelta = GetTranslationDelta(currentFinger1, currentFinger2, _oldFinger1, _oldFinger2, imagePosition, scaleFactor); _oldFinger1 = currentFinger1; _oldFinger2 = currentFinger2; _oldScaleFactor = e.DistanceRatio; UpdateImageScale(scaleFactor); if (isRestore) //image's total reduction is < 1 { imagePosition.X = (FileImage.ActualWidth * (1 - scaleFactor * totalImageScale)) / 2; imagePosition.Y = (FileImage.ActualHeight * (1 - scaleFactor * totalImageScale)) / 2; ApplyPosition(); } else { UpdateImagePosition(translationDelta); } }
private void OnPinchDelta(object sender, PinchGestureEventArgs e) { if (isAnimating) { return; } var scaleFactor = e.DistanceRatio / oldScaleFactor; if (!IsScaleValid(scaleFactor)) { return; } var currentFinger1 = e.GetPosition(_content, 0); var currentFinger2 = e.GetPosition(_content, 1); var translationDelta = GetTranslationDelta(currentFinger1, currentFinger2, scaleFactor); oldFinger1 = currentFinger1; oldFinger2 = currentFinger2; oldScaleFactor = e.DistanceRatio; UpdateScale(scaleFactor); UpdatePosition(translationDelta); e.Handled = true; }
private void gesture_PinchCompleted(object sender, PinchGestureEventArgs e) { var point = e.GetPosition(ContentPanel, 0); var point2 = e.GetPosition(ContentPanel, 1); message.Text = string.Format("pinch completed at ({0},{1}) and ({1},{2}) with angle delta {3} and distance ratio {4}", point.X, point.Y, point2.X, point2.Y, e.TotalAngleDelta, e.DistanceRatio); }
private void OnPinchDelta(object sender, PinchGestureEventArgs e) { // if its less that the original size or more than 4x then does not apply if (initialScale * e.DistanceRatio > 4 || (Math.Abs(initialScale - 1) > 0.01 && Math.Abs(e.DistanceRatio - 1) < 0.01) || initialScale * e.DistanceRatio < 1) { return; } // if its original size then center it back if (e.DistanceRatio <= 1.08) { ImageTransformation.CenterY = 0; ImageTransformation.CenterY = 0; ImageTransformation.TranslateX = 0; ImageTransformation.TranslateY = 0; } var scaleFactor = e.DistanceRatio / _oldScaleFactor; var currentFinger1 = e.GetPosition(DetailImage, 0); var currentFinger2 = e.GetPosition(DetailImage, 1); var translationDelta = GetTranslationDelta( currentFinger1, currentFinger2, _oldFinger1, _oldFinger2, ImagePosition, scaleFactor); _oldFinger1 = currentFinger1; _oldFinger2 = currentFinger2; _oldScaleFactor = e.DistanceRatio; UpdateImage(scaleFactor, translationDelta); ImageTransformation.CenterX = center.X; ImageTransformation.CenterY = center.Y; //// update the rotation and scaling //if (Orientation == PageOrientation.Landscape) //{ // // when in landscape we need to zoom faster, if not it looks choppy // ImageTransformation.ScaleX = initialScale * (1 + (e.DistanceRatio - 1) * 2); //} //else //{ // ImageTransformation.ScaleX = initialScale * e.DistanceRatio; //} //ImageTransformation.ScaleY = ImageTransformation.ScaleX; }
private void OnPinchDelta(object s, PinchGestureEventArgs e) { var newScale = e.DistanceRatio / _previousScale; var currentFingerOne = e.GetPosition(MyImage, 0); var currentFingerTwo = e.GetPosition(MyImage, 1); var translationDelta = GetTranslationOffset(currentFingerOne, currentFingerTwo, _fingerOne, _fingerTwo, _imageTranslation, newScale); _fingerOne = currentFingerOne; _fingerTwo = currentFingerTwo; _previousScale = e.DistanceRatio; UpdatePicture(newScale, translationDelta); }
private void OnPinchDelta(object s, PinchGestureEventArgs e) { var scaleFactor = e.DistanceRatio / _oldScaleFactor; var currentFinger1 = e.GetPosition(MainImage, 0); var currentFinger2 = e.GetPosition(MainImage, 1); var translationDelta = GetTranslationDelta( currentFinger1, currentFinger2, _oldFinger1, _oldFinger2, ImagePosition, scaleFactor); _oldFinger1 = currentFinger1; _oldFinger2 = currentFinger2; _oldScaleFactor = e.DistanceRatio; UpdateImage(scaleFactor, translationDelta); }
private void OnPinchDelta(object sender, PinchGestureEventArgs e) { if (!CanZoom) { return; } var frameworkElement = sender as FrameworkElement; var transform = frameworkElement.RenderTransform as CompositeTransform; var a = transform.Transform(e.GetPosition(frameworkElement, 0)); // we need the points to be relative to the current transform var b = transform.Transform(e.GetPosition(frameworkElement, 1)); var scale = new CompositeTransform { CenterX = (a.X + b.X) / 2, CenterY = (a.Y + b.Y) / 2, ScaleX = Clamp(e.DistanceRatio * _initialScale / _old.ScaleX, MinZoom / _old.ScaleX, MaxZoom / _old.ScaleX), ScaleY = Clamp(e.DistanceRatio * _initialScale / _old.ScaleY, MinZoom / _old.ScaleY, MaxZoom / _old.ScaleY) }; ConstrainToParentBounds(frameworkElement, scale); transform = ComposeScaleTranslate(transform, scale); frameworkElement.RenderTransform = transform; _old.CenterX = transform.CenterX; _old.CenterY = transform.CenterY; _old.TranslateX = transform.TranslateX; _old.TranslateY = transform.TranslateY; _old.ScaleX = transform.ScaleX; _old.ScaleY = transform.ScaleY; CurrentScaleX = _old.ScaleX; CurrentScaleY = _old.ScaleY; }
private void OnGestureListenerPinchDelta(object sender, PinchGestureEventArgs args) { if (_isPinching) { // Set scaling scaleTransform.ScaleX = args.DistanceRatio; scaleTransform.ScaleY = args.DistanceRatio; rotateTransform.Angle = args.TotalAngleDelta; // Set translation Point ptPinchPosition = args.GetPosition(this); translateTransform.X = ptPinchPosition.X - _ptPinchPositionStart.X; translateTransform.Y = ptPinchPosition.Y - _ptPinchPositionStart.Y; } }
void OnGestureListenerPinchDelta(object sender, PinchGestureEventArgs args) { if (!isPinching) { return; } //if (args.DistanceRatio < 0.7) return; // Set scaling scaleTransform.ScaleX = args.DistanceRatio; scaleTransform.ScaleY = args.DistanceRatio; // Optionally set rotation //if (allowRotateCheckBox.IsChecked.Value) // rotateTransform.Angle = args.TotalAngleDelta; // Set translation Point ptPinchPosition = args.GetPosition(this); translateTransform.X = ptPinchPosition.X - ptPinchPositionStart.X; translateTransform.Y = ptPinchPosition.Y - ptPinchPositionStart.Y; }