public static void AnimateVisibility(bool show, View view) { if ((show && view.Visibility == ViewStates.Visible) || !show && view.Visibility != ViewStates.Visible) { return; } int cx = view.Width / 2; int cy = view.Height / 2; float radius = (float)Math.Hypot(cx, cy); if (show) { Animator anim = ViewAnimationUtils.CreateCircularReveal(view, cx, cy, 0, radius); view.Visibility = ViewStates.Visible; anim.Start(); } else { try { Animator anim = ViewAnimationUtils.CreateCircularReveal(view, cx, cy, radius, 0); anim.AnimationEnd += delegate { view.Visibility = ViewStates.Invisible; }; anim.Start(); } catch (System.Exception) { view.Visibility = ViewStates.Invisible; } } }