private async void Control_PointerWheelChanged(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) { //Debug.WriteLine("Control_PointerWheelChanged"); var pointer = e.GetCurrentPoint(Control).Properties; if (!pointer.IsLeftButtonPressed && !pointer.IsRightButtonPressed) { double oldScale = Element.ViewScale; int delta = pointer.MouseWheelDelta; if (delta > 0) { Element.ViewScale = Element.ViewScale * (0.2 * delta / 120 + 1); } else if (delta < 0) { Element.ViewScale = Element.ViewScale / (0.2 * -delta / 120 + 1); } Point oldPoint = Element.ViewPoint.Offset(pointer.ContactRect.X / oldScale, pointer.ContactRect.Y / oldScale); Point newPoint = Element.ViewPoint.Offset(pointer.ContactRect.X / Element.ViewScale, pointer.ContactRect.Y / Element.ViewScale); Element.ViewPoint = Element.ViewPoint.Offset(oldPoint.X - newPoint.X, oldPoint.Y - newPoint.Y); DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Control.Invalidate(); } }
public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { var x = e2.GetX(); var y = e2.GetY(); Scroller.Fling((int)x, (int)y, (int)velocityX / 4, (int)velocityY / 4, 0, Width * 5, 0, Height * 5); Device.StartTimer(new TimeSpan(1), () => { if (Scroller.ComputeScrollOffset()) { var xx = Scroller.CurrX; var yy = Scroller.CurrY; Element.ViewPoint = Element.ViewPoint.Offset(-(xx - x) / Element.ViewScale, -(yy - y) / Element.ViewScale); DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Invalidate(); } return(!Scroller.IsFinished); }); return(true); }
public bool OnScale(ScaleGestureDetector detector) { //Debug.WriteLine("Control_PointerWheelChanged"); if (detector.PreviousSpan != detector.CurrentSpan) { double oldScale = Element.ViewScale; // UWP delta とは逆値 double sclae = detector.PreviousSpan / detector.CurrentSpan; if (sclae < 1) { Element.ViewScale = Element.ViewScale * (sclae * 1.1); } else if (sclae > 1) { Element.ViewScale = Element.ViewScale * (sclae / 1.1); } Xamarin.Forms.Point oldPoint = Element.ViewPoint.Offset(detector.FocusX / oldScale, detector.FocusY / oldScale); Xamarin.Forms.Point newPoint = Element.ViewPoint.Offset(detector.FocusX / Element.ViewScale, detector.FocusY / Element.ViewScale); Element.ViewPoint = Element.ViewPoint.Offset(oldPoint.X - newPoint.X, oldPoint.Y - newPoint.Y); DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Invalidate(); } return(true); }
private async void Control_SizeChanged(object sender, Windows.UI.Xaml.SizeChangedEventArgs e) { //Debug.WriteLine("Control_SizeChanged"); DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Control.Invalidate(); }
private void Control_LayoutChange(object sender, LayoutChangeEventArgs e) { //Debug.WriteLine("Control_SizeChanged"); DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Invalidate(); }
private async void Control_ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e) { //Debug.WriteLine("Control_ManipulationDelta"); Element.ViewPoint = Element.ViewPoint.Offset(-e.Delta.Translation.X / Element.ViewScale, -e.Delta.Translation.Y / Element.ViewScale); DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Control.Invalidate(); }
protected override async void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName == "DeviceImage") { DrawImage = await Element.DrawImmageRequestAsync(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Control.Invalidate(); } }
public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { //Debug.WriteLine("Control_ManipulationDelta"); // UWP delta とは逆値 Element.ViewPoint = Element.ViewPoint.Offset(distanceX / Element.ViewScale, distanceY / Element.ViewScale); DrawImage = Element.DrawImmageRequest(Element.ViewPoint, Matrix2.Enlargement(ViewSize, 1 / Element.ViewScale, 1 / Element.ViewScale)); Invalidate(); return(true); }
private void Control_Draw(CanvasControl sender, CanvasDrawEventArgs args) { args.DrawingSession.FillRectangle(GetDeviceRect(new Rectangle(Point.Zero, ViewSize)), Windows.UI.Color.FromArgb((byte)(Element.BackgroundColor.A * 255d), (byte)(Element.BackgroundColor.R * 255d), (byte)(Element.BackgroundColor.G * 255d), (byte)(Element.BackgroundColor.B * 255d))); if (DrawImage != null && DrawImage.Image != null) { Rectangle viewRect = new Rectangle { Location = Matrix2.Enlargement(DrawImage.DrawRect.Location.Offset(-Element.ViewPoint.X, -Element.ViewPoint.Y), Element.ViewScale, Element.ViewScale), Size = Matrix2.Enlargement(DrawImage.DrawRect.Size, Element.ViewScale, Element.ViewScale) }; args.DrawingSession.DrawImage(DrawImage.Image as ICanvasImage, GetDeviceRect(viewRect), GetDeviceRect(DrawImage.DrawRect), 1f, CanvasImageInterpolation.HighQualityCubic); } }
protected override void OnDraw(Canvas canvas) { base.OnDraw(canvas); Paint paint = new Paint(PaintFlags.AntiAlias); paint.Color = new Android.Graphics.Color((byte)(Element.BackgroundColor.A * 255d), (byte)(Element.BackgroundColor.R * 255d), (byte)(Element.BackgroundColor.G * 255d), (byte)(Element.BackgroundColor.B * 255d)); //paint.Color = Android.Graphics.Color.Honeydew; paint.SetStyle(Paint.Style.Fill); canvas.DrawRect(new Rect(0, 0, Width, Height), paint); if (DrawImage != null && DrawImage.Image != null) { Rectangle viewRect = new Rectangle { Location = Matrix2.Enlargement(DrawImage.DrawRect.Location.Offset(-Element.ViewPoint.X, -Element.ViewPoint.Y), Element.ViewScale, Element.ViewScale), Size = Matrix2.Enlargement(DrawImage.DrawRect.Size, Element.ViewScale, Element.ViewScale) }; canvas.DrawBitmap(DrawImage.Image as Bitmap, GetDeviceRect(DrawImage.DrawRect), GetDeviceRect(viewRect), null); //canvas.DrawBitmap(DrawImage.Image as Bitmap, GetDeviceRect(viewRect), GetDeviceRect(DrawImage.DrawRect), null); } }