From 88c0da5791efa3ebdc3385aadf091b574a987d80 Mon Sep 17 00:00:00 2001 From: adrianknight89 Date: Fri, 30 Sep 2016 14:01:31 -0500 Subject: [Android] InputTransparent and IsEnabled fixes on visual elements (#344) * intercepting touch event when inputtransparent and isenabled are set. also made some refactoring. * keeping tabs --- .../VisualElementRenderer.cs | 44 ++++++++++------------ 1 file changed, 19 insertions(+), 25 deletions(-) (limited to 'Xamarin.Forms.Platform.Android') diff --git a/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs b/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs index 745d2cdd..637ac3bc 100644 --- a/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs +++ b/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs @@ -16,7 +16,6 @@ namespace Xamarin.Forms.Platform.Android readonly Lazy _gestureDetector; readonly PanGestureHandler _panGestureHandler; readonly PinchGestureHandler _pinchGestureHandler; - readonly TapGestureHandler _tapGestureHandler; NotifyCollectionChangedEventHandler _collectionChangeHandler; @@ -72,10 +71,7 @@ namespace Xamarin.Forms.Platform.Android } } - View View - { - get { return Element as View; } - } + View View => Element as View; void IEffectControlProvider.RegisterEffect(Effect effect) { @@ -89,6 +85,14 @@ namespace Xamarin.Forms.Platform.Android _tapGestureHandler.OnSingleClick(); } + public override bool OnInterceptTouchEvent(MotionEvent ev) + { + if (Element.InputTransparent && Element.IsEnabled) + return false; + + return base.OnInterceptTouchEvent(ev); + } + bool IOnTouchListener.OnTouch(AView v, MotionEvent e) { var handled = false; @@ -104,10 +108,7 @@ namespace Xamarin.Forms.Platform.Android return _gestureDetector.Value.OnTouchEvent(e) || handled; } - VisualElement IVisualElementRenderer.Element - { - get { return Element; } - } + VisualElement IVisualElementRenderer.Element => Element; event EventHandler IVisualElementRenderer.ElementChanged { @@ -124,7 +125,7 @@ namespace Xamarin.Forms.Platform.Android void IVisualElementRenderer.SetElement(VisualElement element) { if (!(element is TElement)) - throw new ArgumentException("element is not of type " + typeof(TElement), "element"); + throw new ArgumentException("element is not of type " + typeof(TElement), nameof(element)); SetElement((TElement)element); } @@ -134,23 +135,18 @@ namespace Xamarin.Forms.Platform.Android public void UpdateLayout() { Performance.Start(); - if (Tracker != null) - Tracker.UpdateLayout(); - + Tracker?.UpdateLayout(); Performance.Stop(); } - public ViewGroup ViewGroup - { - get { return this; } - } + public ViewGroup ViewGroup => this; public event EventHandler> ElementChanged; public void SetElement(TElement element) { if (element == null) - throw new ArgumentNullException("element"); + throw new ArgumentNullException(nameof(element)); TElement oldElement = Element; Element = element; @@ -293,12 +289,10 @@ namespace Xamarin.Forms.Platform.Android protected virtual void OnElementChanged(ElementChangedEventArgs e) { var args = new VisualElementChangedEventArgs(e.OldElement, e.NewElement); - for (var i = 0; i < _elementChangedHandlers.Count; i++) - _elementChangedHandlers[i](this, args); + foreach (EventHandler handler in _elementChangedHandlers) + handler(this, args); - EventHandler> changed = ElementChanged; - if (changed != null) - changed(this, e); + ElementChanged?.Invoke(this, e); } protected virtual void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) @@ -315,9 +309,9 @@ namespace Xamarin.Forms.Platform.Android return; ReadOnlyCollection children = ((IElementController)Element).LogicalChildren; - for (var i = 0; i < children.Count; i++) + foreach (Element element in children) { - var visualElement = children[i] as VisualElement; + var visualElement = element as VisualElement; if (visualElement == null) continue; -- cgit v1.2.3