如何计算 UWP 中 Canvas 的 PointerMoved 事件期间移动的距离?
How to calculate the distance moved during PointerMoved event of Canvas in UWP?
Canvas c=new Canvas();
c.Width=1200;
c.Height=700;
c.PointerMoved+=Moved;
private void Moved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
Point PointerPosition = CurrentPosition.Position;
}
我不知道如何计算在此期间移动的距离 event.The PointerPosition 给出当前(x 和 y)。我需要计算在此事件期间移动的距离。
PointerMoved
事件是一个持续触发的事件。如果要计算指针移动的距离,需要有一个“起点”。
Point StartPoint = new Point(0, 0);
...
c.PointerEntered += Entered;
private void Entered(object sender, PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
StartPoint = CurrentPosition.Position;
}
private void Moved(object sender, PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
Point PointerPosition = CurrentPosition.Position;
double xDistance = Math.Abs(PointerPosition.X - StartPoint.X);
double yDistance = Math.Abs(PointerPosition.Y - StartPoint.Y);
double Distance = Math.Sqrt(xDistance * xDistance + yDistance * yDistance);
}
更新
如果我们需要计算两次PointerMoved
事件之间指针位置的变化,就需要引入一个变量来记录最后一次指针位置。
Point PreviousPoint;
private void Moved(object sender, PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
Point PointerPosition = CurrentPosition.Position;
if (PreviousPoint != null)
{
double xDistance = Math.Abs(PointerPosition.X - PreviousPoint.X);
double yDistance = Math.Abs(PointerPosition.Y - PreviousPoint.Y);
double Distance = Math.Sqrt(xDistance * xDistance + yDistance * yDistance);
// TODO use Distance
}
PreviousPoint = PointerPosition;
}
谢谢。
Canvas c=new Canvas();
c.Width=1200;
c.Height=700;
c.PointerMoved+=Moved;
private void Moved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
Point PointerPosition = CurrentPosition.Position;
}
我不知道如何计算在此期间移动的距离 event.The PointerPosition 给出当前(x 和 y)。我需要计算在此事件期间移动的距离。
PointerMoved
事件是一个持续触发的事件。如果要计算指针移动的距离,需要有一个“起点”。
Point StartPoint = new Point(0, 0);
...
c.PointerEntered += Entered;
private void Entered(object sender, PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
StartPoint = CurrentPosition.Position;
}
private void Moved(object sender, PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
Point PointerPosition = CurrentPosition.Position;
double xDistance = Math.Abs(PointerPosition.X - StartPoint.X);
double yDistance = Math.Abs(PointerPosition.Y - StartPoint.Y);
double Distance = Math.Sqrt(xDistance * xDistance + yDistance * yDistance);
}
更新
如果我们需要计算两次PointerMoved
事件之间指针位置的变化,就需要引入一个变量来记录最后一次指针位置。
Point PreviousPoint;
private void Moved(object sender, PointerRoutedEventArgs e)
{
PointerPoint CurrentPosition = e.GetCurrentPoint(sender as Canvas);
Point PointerPosition = CurrentPosition.Position;
if (PreviousPoint != null)
{
double xDistance = Math.Abs(PointerPosition.X - PreviousPoint.X);
double yDistance = Math.Abs(PointerPosition.Y - PreviousPoint.Y);
double Distance = Math.Sqrt(xDistance * xDistance + yDistance * yDistance);
// TODO use Distance
}
PreviousPoint = PointerPosition;
}
谢谢。