我希望我能够轻松解释我的问题。
我有一个饼图外观控件,其中包含“饼图”
在饼图控件之上,我有一个用作用户选择器的饼图,他可以点击未选择的饼图将选择器移动到新位置(还有其他选项)这样做,但这与我的问题无关)
当他点击一个新的饼图时,我正在计算“度角度”(我用来绘制饼图的类型为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);
}
,但它很丑,我想使用一个自定义动画来执行此操作......任何人?