Example #1
0
        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();
        }
Example #2
0
        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;
        }
Example #3
0
        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();
            }
        }