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