public static void AnimateBgColorChange(View clickedView, View backgroundView, View bgOverlay, int newColor)
        {
            var centerX     = (int)(ViewCompat.GetX(clickedView) + (int)(clickedView.MeasuredWidth / 2));
            var centerY     = clickedView.MeasuredHeight / 2;
            var finalRadius = backgroundView.Width;

            backgroundView.ClearAnimation();
            bgOverlay.ClearAnimation();

            object animator;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
            {
                if (!bgOverlay.IsAttachedToWindow)
                {
                    return;
                }

                animator = ViewAnimationUtils.CreateCircularReveal(bgOverlay, centerX, centerY, 0, finalRadius);
            }
            else
            {
                ViewCompat.SetAlpha(bgOverlay, 0);
                animator = ViewCompat.Animate(bgOverlay).Alpha(1);
            }

            var compat = animator as ViewPropertyAnimatorCompat;

            if (compat != null)
            {
                compat
                .SetListener(new CustomViewPropertyAnimatorListenerAdapter(backgroundView, newColor, bgOverlay))
                .Start();
            }
            else if (animator != null)
            {
                ((Animator)animator).AddListener(new CustomAnimatorListenerAdapter(backgroundView, newColor, bgOverlay));
                ((Animator)animator).Start();
            }

            bgOverlay.SetBackgroundColor(new Color(newColor));
            bgOverlay.Visibility = ViewStates.Visible;
        }