Ejemplo n.º 1
0
        private void OnClickedExpander()
        {
            if (_initialHeight == 0)
            {
                _initialHeight  = Container.Height - 15;
                _expandedHeight = _initialHeight * 2;
            }

            bool isExpanded = ButtonExpand.Rotation == 180;

            var from = isExpanded ? _expandedHeight : _initialHeight;
            var to   = isExpanded ? _initialHeight : _expandedHeight;

            Easing easing = Easing.SpringOut;
            uint   length = 500;

            switch (_counter)
            {
            case 0:
                easing           = new Easing(t => 9 * t * t * t - 13.5 * t * t + 5.5 * t);
                EasingLabel.Text = "Hula Hoop Easing";
                break;

            case 1:
                easing           = new Easing(t => 1 - Math.Cos(10 * Math.PI * t) * Math.Exp(-5 * t));
                EasingLabel.Text = "Shaking Easing";
                break;

            case 2:
                easing           = Easing.SpringOut;
                EasingLabel.Text = "Spring Out Easing";
                break;

            case 3:
                easing           = Easing.SpringIn;
                EasingLabel.Text = "Spring In Easing";
                break;
            }

            TaskMonitor.Create(
                async() =>
            {
                var easingLabelTask = EasingLabel.RotateTo(isExpanded ? 0 : 360, length, easing);
                var rotateTask      = ButtonExpand.RotateTo(isExpanded ? 0 : 180, length, easing);
                var heightAnimation = Container.DoubleTo(
                    from,
                    to,
                    h => Container.HeightRequest = h,
                    length,
                    easing);

                await Task.WhenAll(rotateTask, heightAnimation, easingLabelTask);

                if (isExpanded)
                {
                    EasingLabel.Text = "Show more details";
                }

                ButtonExpand.Rotation = isExpanded ? 0 : 180;
                EasingLabel.Rotation  = isExpanded ? 0 : 360;
            });
        }