1

我希望我能够轻松地解释我的问题。

我有一个类似于饼图的控件,其中包含“饼图”

在该饼图控件的顶部,我有一个饼图用作用户的选择器,他可以单击未选择的饼图将选择器移动到他的新位置(并且还有其他选项可以这样做,但这与我的问题无关)

当他点击一个新的饼图时,我正在计算角度(我用来绘制饼图的 double 类型的属性),效果很好,

现在我想在选择器移动时添加一个很酷的动画,我已经使用了 DoubleAnimation 这样做,但是我有问题,

假设当前选中的饼片在 30 度,下一个选中的饼片在 300 度,动画将转 270 度而不是从 30 到 0 再从 360 到 270 的“返回”,制作一个更短的旋转...

反之亦然,如果当前选中的棋子在 300 度,下一个在 30 度,则应该先到 360,然后再从 0 到 30。

这样做的原因对我来说是显而易见的。这是双动画,不是度数动画,

这就是为什么我想创建一个自定义动画来做到这一点,

我试过这样做,但我不明白自定义动画是如何工作的,

我只是不明白 GetCurrentValueCore 是如何工作的。

谁能帮助我解决这个问题?

非常感谢。

更新:

目前,我正在使用这个解决方案:

var selector = ...../

var from = fromRotationAngle;

                    var to = toRotationAngle;

                    if(Math.Abs(from - to) > 180)
                    {
                        var distanceFromZero = Math.Abs(0 - from);
                        var distanceFromEnd = Math.Abs(360 - from);


                        var anim = new DoubleAnimation
                        {
                            From = from,
                            To = distanceFromEnd < distanceFromZero ? 360 : 0,
                            SpeedRatio = 2,

                        };


                        var secondAnim = new DoubleAnimation
                        {
                            From = distanceFromEnd < distanceFromZero ? 0 : 360,
                            To = to,
                            SpeedRatio = 2
                        };

                        anim.Completed += (s, e) =>
                        {
                            selector.BeginAnimation(PiePiece.RotationAngleProperty, secondAnim);
                        };

                        selector.BeginAnimation(PiePiece.RotationAngleProperty, anim);
                    }
                    else
                    {
                        var anim = new DoubleAnimation
                        {
                            From = from,
                            To = to,
                            SpeedRatio = 2,
                        };

                        selector.BeginAnimation(PiePiece.RotationAngleProperty, anim); 
                    }

,但它很难看,我想使用一个自定义动画来执行这个动作......有人吗?

4

0 回答 0