summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/PanGestureHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.Android/PanGestureHandler.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/PanGestureHandler.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/PanGestureHandler.cs b/Xamarin.Forms.Platform.Android/PanGestureHandler.cs
new file mode 100644
index 00000000..a552964c
--- /dev/null
+++ b/Xamarin.Forms.Platform.Android/PanGestureHandler.cs
@@ -0,0 +1,69 @@
+using System;
+
+namespace Xamarin.Forms.Platform.Android
+{
+ internal class PanGestureHandler
+ {
+ readonly Func<double, double> _pixelTranslation;
+
+ public PanGestureHandler(Func<View> getView, Func<double, double> pixelTranslation)
+ {
+ _pixelTranslation = pixelTranslation;
+ GetView = getView;
+ }
+
+ Func<View> GetView { get; }
+
+ public bool OnPan(float x, float y, int pointerCount)
+ {
+ View view = GetView();
+
+ if (view == null)
+ return false;
+
+ var result = false;
+ foreach (PanGestureRecognizer panGesture in
+ view.GestureRecognizers.GetGesturesFor<PanGestureRecognizer>(g => g.TouchPoints == pointerCount))
+ {
+ ((IPanGestureController)panGesture).SendPan(view, _pixelTranslation(x), _pixelTranslation(y), Application.Current.PanGestureId);
+ result = true;
+ }
+
+ return result;
+ }
+
+ public bool OnPanComplete()
+ {
+ View view = GetView();
+
+ if (view == null)
+ return false;
+
+ var result = false;
+ foreach (PanGestureRecognizer panGesture in view.GestureRecognizers.GetGesturesFor<PanGestureRecognizer>())
+ {
+ ((IPanGestureController)panGesture).SendPanCompleted(view, Application.Current.PanGestureId);
+ result = true;
+ }
+ Application.Current.PanGestureId++;
+ return result;
+ }
+
+ public bool OnPanStarted(int pointerCount)
+ {
+ View view = GetView();
+
+ if (view == null)
+ return false;
+
+ var result = false;
+ foreach (PanGestureRecognizer panGesture in
+ view.GestureRecognizers.GetGesturesFor<PanGestureRecognizer>(g => g.TouchPoints == pointerCount))
+ {
+ ((IPanGestureController)panGesture).SendPanStarted(view, Application.Current.PanGestureId);
+ result = true;
+ }
+ return result;
+ }
+ }
+} \ No newline at end of file