WPF - 创建自定义双重动画 - DegreesAnimation

时间:2016-01-25 21:30:10

标签: c# wpf animation doubleanimation

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

我有一个饼图外观控件,其中包含“饼图”

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

当他点击一个新的饼图时,我正在计算“度角度”(我用来绘制饼图的类型为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); 
                    }

,但它很丑,我想使用一个自定义动画来执行此操作......任何人?

0 个答案:

没有答案