private async Task GoBack()
        {
            if (!_isAnimating)
            {
                _isAnimating      = true;
                IsChildItemOpened = false;
                await HideButtons(ParentInBackgroundItem.ChildItems);

                InnerButtonMenu.IsVisible  = false;
                InnerButtonClose.IsVisible = true;
                BackButton.IsVisible       = true;
                //await HideButtons(MenuItemsSource);


                InnerButtonMenu.RotateTo(360, _animationDelay);
                InnerButtonMenu.FadeTo(0, _animationDelay);
                BackButton.RotateTo(0, _animationDelay);
                BackButton.FadeTo(0, _animationDelay);
                InnerButtonClose.RotateTo(360, _animationDelay);
                InnerButtonClose.FadeTo(1, _animationDelay);

                await OuterCircle.ScaleTo(1, (uint)ChildShrinkAnimationDuration, ChildShrinkEasing);

                await OuterCircle.ScaleTo(3.3, (uint)ChildGrowAnimationDuration, ChildGrowEasing);

                ClearGridButtons();

                //Show Main buttons again
                for (int j = 0; j < MenuItemsSource.Count; j++)
                {
                    var childItem = MenuItemsSource[j] as RadialMenuItem;
                    OrganizeItem(childItem);
                    mainGrid.Children.Add(childItem);
                    HandleOptionClicked(childItem, childItem.Location);
                }

                await ShowButtons(MenuItemsSource);

                InnerButtonMenu.IsVisible = false;
                BackButton.IsVisible      = false;
                _isAnimating = false;

                HandleMenuCenterClicked();
                HandleCloseClicked();
                BackButton.GestureRecognizers.Clear();
            }
        }
        public async Task CloseMenu(RadialMenuItem itemTapped = null)
        {
            if (!_isAnimating)
            {
                if (itemTapped == null)
                {
                    _isAnimating = true;

                    InnerButtonMenu.IsVisible  = true;
                    InnerButtonClose.IsVisible = true;
                    await HideButtons(MenuItemsSource);

                    BackButton.RotateTo(0, _animationDelay);
                    BackButton.FadeTo(0, _animationDelay);
                    InnerButtonClose.RotateTo(0, _animationDelay);
                    InnerButtonClose.FadeTo(0, _animationDelay);
                    InnerButtonMenu.RotateTo(0, _animationDelay);
                    InnerButtonMenu.FadeTo(1, _animationDelay);
                    await OuterCircle.ScaleTo(1, (uint)MenuCloseAnimationDuration, MenuCloseEasing);

                    InnerButtonClose.IsVisible = false;
                    BackButton.IsVisible       = false;
                    _isAnimating = false;
                }
                else
                {
                    _isAnimating = true;

                    InnerButtonMenu.IsVisible  = false;
                    InnerButtonClose.IsVisible = true;
                    BackButton.IsVisible       = true;
                    await HideButtons(MenuItemsSource);

                    InnerButtonClose.RotateTo(0, _animationDelay);
                    InnerButtonClose.FadeTo(0, _animationDelay);
                    InnerButtonMenu.RotateTo(360, _animationDelay);
                    InnerButtonMenu.FadeTo(1, _animationDelay);
                    BackButton.RotateTo(360, _animationDelay);
                    BackButton.FadeTo(1, _animationDelay);


                    await OuterCircle.ScaleTo(1, (uint)ChildShrinkAnimationDuration, ChildShrinkEasing);

                    await OuterCircle.ScaleTo(3.3, (uint)ChildGrowAnimationDuration, ChildGrowEasing);



                    ClearGridButtons();
                    if (itemTapped.ChildItems != null && itemTapped.ChildItems.Count > 0)
                    {
                        for (int j = 0; j < itemTapped.ChildItems.Count; j++)
                        {
                            var childItem = itemTapped.ChildItems[j];
                            OrganizeItem(childItem);
                            mainGrid.Children.Add(childItem);
                            HandleChildOptionClicked(childItem, childItem.Location);
                        }
                    }
                    await ShowButtons(itemTapped.ChildItems);

                    //ParentInBackgroundItem = itemTapped;

                    InnerButtonClose.IsVisible = false;
                    InnerButtonMenu.IsVisible  = false;

                    HandleBackClicked();
                    InnerButtonMenu.GestureRecognizers.Clear();
                    InnerButtonClose.GestureRecognizers.Clear();

                    _isAnimating = false;
                }
            }
        }
        private void HandleChildOptionClicked(RadialMenuItem parentItem, Enumerations.Enumerations.RadialMenuLocation value)
        {
            parentItem.GestureRecognizers.Clear();
            parentItem.GestureRecognizers.Add(new TapGestureRecognizer()
            {
                Command = new Command(async() =>
                {
                    //IsOpened = false;
                    ChildItemTapped?.Invoke(this, new Models.ChildItemTapped()
                    {
                        Parent = ParentInBackgroundItem, ItemTapped = value
                    });
                    if (CloseMenuWhenChildTapped)
                    {
                        IsOpened          = false;
                        IsChildItemOpened = false;
                        if (!_isAnimating)
                        {
                            _isAnimating = true;

                            InnerButtonMenu.IsVisible  = true;
                            InnerButtonClose.IsVisible = false;
                            BackButton.IsVisible       = true;

                            await HideButtons(ParentInBackgroundItem.ChildItems);

                            InnerButtonClose.RotateTo(0, _animationDelay);
                            InnerButtonClose.FadeTo(0, _animationDelay);

                            BackButton.RotateTo(0, _animationDelay);
                            BackButton.FadeTo(0, _animationDelay);

                            InnerButtonMenu.RotateTo(0, _animationDelay);
                            InnerButtonMenu.FadeTo(1, _animationDelay);

                            ClearGridButtons();

                            await OuterCircle.ScaleTo(1, (uint)MenuCloseAnimationDuration, MenuCloseEasing);


                            InnerButtonClose.IsVisible = false;
                            BackButton.IsVisible       = false;

                            BackButton.GestureRecognizers.Clear();
                            InnerButtonMenu.GestureRecognizers.Clear();
                            InnerButtonClose.GestureRecognizers.Clear();
                            HandleMenuCenterClicked();
                            HandleCloseClicked();

                            foreach (var i in MenuItemsSource)
                            {
                                var item = i as RadialMenuItem;
                                //OrganizeItem(item);
                                mainGrid.Children.Add(item);
                                //HandleOptionClicked(item, item.Location);
                            }

                            _isAnimating = false;
                        }
                    }
                    else
                    {
                        GoBack();
                    }
                }),
                NumberOfTapsRequired = 1
            });
        }