private void OpenFABAnimation() { const int animationDuration = 100; const int animationFadeDuration = 500; _isOpening = true; if (ItemsLayout != null) { for (int index = 0; index < ItemsLayout.ViewItems.Count; index++) { var currentItem = ItemsLayout.ViewItems[index]; var position = CalculateItemClosedPosition(currentItem, index); currentItem.TranslationY = position; currentItem.Opacity = 0; } ItemsLayout.IsVisible = true; OpacityFilter.IsVisible = true; OpacityFilter.Opacity = 0; OpacityFilter.FadeTo(0.5, animationFadeDuration); if (IsRotateAnimationEnabled) { FAB.RotateAnimation(); } foreach (var item in ItemsLayout.ViewItems) { item.TranslateTo(0, 0, animationDuration, easing: Easing.BounceIn); item.FadeTo(1, animationDuration, easing: Easing.BounceIn); } } }
private async void CloseAnimationOnFab() { _isOpening = false; if (IsRotateAnimationEnabled) { FAB.RestoreRotationAnimation(); } if (ItemsLayout != null) { const int animationDuration = 250; ItemsLayout.IsVisible = true; var tasks = new List <Task>(); if (ItemsLayout.ViewItems != null) { tasks.Add(OpacityFilter.FadeTo(0, animationDuration)); for (int index = 0; index < ItemsLayout.ViewItems.Count; index++) { var currentItem = ItemsLayout.ViewItems[index]; var position = CalculateItemClosedPosition(currentItem, index); tasks.Add(currentItem.TranslateTo(0, position, animationDuration, easing: Easing.BounceIn)); tasks.Add(currentItem.FadeTo(0, animationDuration, easing: Easing.BounceIn)); } await Task.WhenAll(tasks.ToArray()); // if user didn't reopen the FAM during animation if (_isOpening == false) { ItemsLayout.IsVisible = false; OpacityFilter.IsVisible = false; } } } }