[Android] Forward ScrollView touch events to custom renderers (#472)
authoradrianknight89 <adrianknight89@outlook.com>
Mon, 31 Oct 2016 11:41:46 +0000 (06:41 -0500)
committerRui Marinho <me@ruimarinho.net>
Mon, 31 Oct 2016 11:41:46 +0000 (11:41 +0000)
* Forward touch events

* remove double cast

Xamarin.Forms.Platform.Android/Renderers/AHorizontalScrollView.cs
Xamarin.Forms.Platform.Android/Renderers/ScrollViewRenderer.cs

index 6a64a35..4d192dc 100644 (file)
@@ -31,6 +31,14 @@ namespace Xamarin.Forms.Platform.Android
 
                public override bool OnTouchEvent(MotionEvent ev)
                {
+                       // If the touch is caught by the horizontal scrollview, forward it to the parent so custom renderers can be notified of the touch.
+                       var verticalScrollViewerRenderer = Parent as ScrollViewRenderer;
+                       if (verticalScrollViewerRenderer != null)
+                       {
+                               verticalScrollViewerRenderer.ShouldSkipOnTouch = true;
+                               verticalScrollViewerRenderer.OnTouchEvent(ev);
+                       }
+
                        // The nested ScrollViews will allow us to scroll EITHER vertically OR horizontally in a single gesture.
                        // This will allow us to also scroll diagonally.
                        // We'll fall through to the base event so we still get the fling from the ScrollViews.
@@ -49,6 +57,7 @@ namespace Xamarin.Forms.Platform.Android
                                        ScrollBy((int)dX, 0);
                                }
                        }
+
                        return base.OnTouchEvent(ev);
                }
 
index acad08c..2f66d8e 100644 (file)
@@ -14,7 +14,7 @@ namespace Xamarin.Forms.Platform.Android
                ScrollViewContainer _container;
                HorizontalScrollView _hScrollView;
                bool _isAttached;
-
+               internal bool ShouldSkipOnTouch;
                bool _isBidirectional;
                ScrollView _view;
 
@@ -118,6 +118,12 @@ namespace Xamarin.Forms.Platform.Android
 
                public override bool OnTouchEvent(MotionEvent ev)
                {
+                       if (ShouldSkipOnTouch)
+                       {
+                               ShouldSkipOnTouch = false;
+                               return false;
+                       }
+
                        // The nested ScrollViews will allow us to scroll EITHER vertically OR horizontally in a single gesture.
                        // This will allow us to also scroll diagonally.
                        // We'll fall through to the base event so we still get the fling from the ScrollViews.