async Task UpdateTogglePosition(bool animated = true) { _isToggling = true; uint duration = 100; var easing = IsToggled ? Easing.CubicIn : Easing.CubicOut; if (animated == false) { duration = 0; } var xPosition = IsToggled ? (RoundedRectangle.WidthRequest - 2 - 2 - CircleDot.Width) : 0; var animationTasks = new List <Task>(); animationTasks.Add(CircleDot.TranslateTo(xPosition, 0, duration, easing)); var fromColor = RoundedRectangle.BackgroundColor; var toColor = IsToggled ? OnColor : OffColor; animationTasks.Add(RoundedRectangle.ColorTo(fromColor, toColor, (color) => { RoundedRectangle.BackgroundColor = color; }, duration, easing)); await Task.WhenAll(animationTasks); CurrentColor = toColor; _isToggling = false; }