我正在尝试通过挂钩GestureRecognizer事件来检测CrossSliding的水平滑动手势。
_gr = new GestureRecognizer
{
GestureSettings = GestureSettings.ManipulationTranslateX |
GestureSettings.ManipulationTranslateY |
GestureSettings.CrossSlide
};
_gr.CrossSliding += OnSwipe;
_gr.ManipulationStarted += OnManipulationStarted;
_gr.ManipulationUpdated += OnManipulationUpdated;
_gr.ManipulationCompleted += OnManipulationCompleted;
_gr.CrossSlideHorizontally = true;
从上面的代码中可以看出,不仅要检测滑动,还要拖动手势。
我的问题是我似乎无法自定义滑动手势。
我想自定义用户在将手势视为滑动之前拖动指针的最小速度和距离。在当前状态下,即使最慢和最小的水平拖动动作也会触发CrossSliding
事件。
我看到允许自定义手势的CrossSlideThresholds类,但我看不出它如何用于配置滑动手势的速度和距离。
CrossSliding
事件是否是检测滑动的正确方法?如果是这样,我该如何配置速度和滑动距离?
如果没有,我该如何检测滑动手势?
答案 0 :(得分:0)
我找不到任何内置方法来检测滑动,因此我实施了自己的检测方法。
代码检测水平滑动。
显示的方法是GestureRecognizer
事件的事件处理程序:
readonly Stopwatch _manipulationTimer = new Stopwatch();
public void OnManipulationStarted(ManipulationStartedEventArgs e)
{
_manipulationTimer.Restart();
}
public void OnManipulationCompleted(ManipulationCompletedEventArgs e)
{
var millis = _manipulationTimer.ElapsedMilliseconds;
if (Math.Abs(e.Cumulative.Translation.Y) < MaxVerticalSwipeDistanceInPix &&
Math.Abs(e.Cumulative.Translation.X) > MinHorizontalSwipeDistanceInPix &&
millis > MinSwipeDurationInMillis &&
millis < MaxSwipeDurationInMillis &&
Math.Abs(e.Cumulative.Scale - 1) < 0.01 // 1 touch point
)
{
var leftSwipe = e.Cumulative.Translation.X < 0;
if (leftSwipe)
{
}
else // right swipe
{
}
}
_manipulationTimer.Stop();
_manipulationTimer.Reset();
}