所以我有2 Image
我希望第一个Image
移向另一个Image
我有X,Y坐标,如果这样做,应该如何做我希望它逐个像素地移动到目标Image
?
请记住,我正在使用Windows-Universal
我已尝试DoubleAnimation
但我对这些内容的了解非常糟糕,我不知道从哪里开始。 Image
有时必须沿对角线(横向)移动而不是向右移动。
我该怎么做?
这是我到目前为止所做的:
private void MoveToTarget_Start()
{
moveToTimer = new DispatcherTimer();
moveToTimer.Tick += MoveToTarget_Tick;
moveToTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);
moveToTimer.Start();
}
void MoveToTarget_Tick(object sender, object e)
{
}
答案 0 :(得分:2)
首先,您需要知道需要移动的像素数。为此,我们可以尝试检索每个元素的绝对位置并进行比较(可能有一种更直接的方式,我只是不知道如何):
private Point GetAbsolutePosition(UIElement element)
{
var ttv = element.TransformToVisual(Window.Current.Content);
return ttv.TransformPoint(new Point(0, 0));
}
(摘自this answer)
从那里,我们检索每个元素的点并计算差异:
var position1 = GetAbsolutePosition(Image1);
var position2 = GetAbsolutePosition(Image2);
var offsetX = position2.X - position1.X;
var offsetY = position2.Y - position1.Y;
现在,我们现在需要在每个轴上移动多少像素。我们为元素添加TranslateTransform
(事先直接从XAML中更好地做到这一点):
var translateTransform = new TranslateTransform();
image1.RenderTransform = translateTransform;
最后,我们创建动画,并定位TranslateTransform
。然后我们将它们分组到一个故事板中,并启动它:
var animationX = new DoubleAnimation()
{
From = 0,
To = offsetX,
Duration = TimeSpan.FromSeconds(2)
};
var animationY = new DoubleAnimation()
{
From = 0,
To = offsetY,
Duration = TimeSpan.FromSeconds(2)
};
Storyboard.SetTarget(animationX, translateTransform);
Storyboard.SetTargetProperty(animationX, "X");
Storyboard.SetTarget(animationY, translateTransform);
Storyboard.SetTargetProperty(animationY, "Y");
var storyboard = new Storyboard();
storyboard.Children.Add(animationX);
storyboard.Children.Add(animationY);
storyboard.Begin();
答案 1 :(得分:1)
说实话,最好的想法是使用DoubleAnimation和Storyboard类。 我将背景设置为Canvas然后您可以通过Canvas.SetLeft和Canvas.SetTop属性为其设置动画。
首先你应该创建DoubleAnimationC类
DoubleAnimation da = new DoubleAnimation()
{
SpeedRatio = 3.0,
AutoReverse = false,
From = 0
To = 100
BeginTime = TimeSpan.FromSeconds(x),
};
Storyboard.SetTarget((Timeline)doubleAnimation, YOUR IMAGE);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)"));
当然可以根据需要更改这些属性,现在我们必须创建包含动画的StoryBoard类
Storyboard sb = new Storyboard();
sb.Children.Add(da);
sb.Start();
希望它有所帮助!