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; }