protected override void OnAttached() { if (View == null) { return; } effect = TouchEffect.PickFrom(Element); if (effect?.IsDisabled ?? true) { return; } effect.Element = (VisualElement)Element; View.Touch += OnTouch; UpdateClickHandler(); accessibilityManager = View.Context.GetSystemService(Context.AccessibilityService) as AccessibilityManager; if (accessibilityManager != null) { accessibilityListener = new AccessibilityListener(this); accessibilityManager.AddAccessibilityStateChangeListener(accessibilityListener); accessibilityManager.AddTouchExplorationStateChangeListener(accessibilityListener); } if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop || !effect.NativeAnimation) { return; } View.Clickable = true; View.LongClickable = true; CreateRipple(); if (Group == null) { if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { View.Foreground = ripple; } return; } rippleView = new FrameLayout(Group.Context) { LayoutParameters = new ViewGroup.LayoutParams(-1, -1), Clickable = false, Focusable = false, Enabled = false, }; View.LayoutChange += OnLayoutChange; rippleView.Background = ripple; Group.AddView(rippleView); rippleView.BringToFront(); }
protected override void OnDetached() { if (effect?.Element == null) { return; } try { if (accessibilityManager != null) { accessibilityManager.RemoveAccessibilityStateChangeListener(accessibilityListener); accessibilityManager.RemoveTouchExplorationStateChangeListener(accessibilityListener); accessibilityListener.Dispose(); accessibilityManager = null; accessibilityListener = null; } if (View != null) { View.LayoutChange -= OnLayoutChange; View.Touch -= OnTouch; View.Click -= OnClick; if (Build.VERSION.SdkInt >= BuildVersionCodes.M && View.Foreground == ripple) { View.Foreground = null; } } effect.Element = null; effect = null; if (rippleView != null) { rippleView.Pressed = false; rippleView.Background = null; Group?.RemoveView(rippleView); rippleView.Dispose(); rippleView = null; } ripple?.Dispose(); ripple = null; } catch (ObjectDisposedException) { // Suppress exception } isHoverSupported = false; }
protected override void OnAttached() { if (View == null) { return; } _effect = Element.PickTouchEff(); if (_effect?.IsDisabled ?? true) { return; } _effect.Control = Element as VisualElement; View.Touch += OnTouch; UpdateClickHandler(); _accessibilityManager = View.Context.GetSystemService(Context.AccessibilityService) as AccessibilityManager; if (_accessibilityManager != null) { _accessibilityListener = new AccessibilityListener(this); _accessibilityManager.AddAccessibilityStateChangeListener(_accessibilityListener); _accessibilityManager.AddTouchExplorationStateChangeListener(_accessibilityListener); } if (_effect.NativeAnimation && Group != null && AndroidOS.Build.VERSION.SdkInt >= AndroidOS.BuildVersionCodes.Lollipop) { View.Clickable = true; View.LongClickable = true; _viewOverlay = new FrameLayout(Group.Context) { LayoutParameters = new ViewGroup.LayoutParams(-1, -1), Clickable = false, Focusable = false, }; View.LayoutChange += LayoutChange; CreateRipple(); _viewOverlay.Background = _ripple; Group.AddView(_viewOverlay); _viewOverlay.BringToFront(); } }