Xamarin Forms Pan 手势速度

Xamarin Forms Pan gesture speed

有机会改变 Xamarin Forms 中平移手势的速度吗?

这是我的 OnPanUpdated 函数和 Clamp 函数:

void OnPanUpdated(object sender, PanUpdatedEventArgs e)
{
    switch (e.StatusType)
    {
        case GestureStatus.Started:
            StartX = (1 - AnchorX) * Width;
            StartY = (1 - AnchorY) * Height;
            break;

        case GestureStatus.Running:
            AnchorX = Clamp(1 - (StartX + (e.TotalX)) / Width, 0, 1);
            AnchorY = Clamp(1 - (StartY + (e.TotalY)) / Height, 0, 1);
            break;
    }
}

private T Clamp<T>(T value, T minimum, T maximum) where T : IComparable
{
    if (value.CompareTo(minimum) < 0)
      return minimum;
    else if (value.CompareTo(maximum) > 0)
      return maximum;
    else
      return value;
}

我试图更改该函数中的每个参数。没有什么真正有效。 当我在屏幕上移动手指时,图像在移动,但对我来说太慢了。 有人可以给我建议或解决方案以加快速度吗?

您无法更改调用平移手势的频率,但您可以对移动应用 "stepping" 因素:

var panFactor = 2.5;
AnchorX = Clamp(1 - (StartX + (e.TotalX * panFactor)) / Width, 0, 1);
AnchorY = Clamp(1 - (StartY + (e.TotalY * panFactor)) / Height, 0, 1);

当然,这会导致平底锅 "jump" "jump"。

我通常会根据锅的时间长度对因子应用对数标度(即从 1.0 到 5.0 的 10 个双打的简单硬编码列表,因为在运行时计算真正的对数标度太过分了)在Running状态下,摇摄的方向为same/constant,摇摄的速度不变。

  • 如果平移被打断(Completed)
  • 或者平移方向改变(X|Yaverage-delta改变符号),

将系数重置回 1 并在平底锅再次 Started 时重新开始。

  • 如果"speed"减少(X|Yaverage-delta小于最后X个样本)

将系数重置回先前的日志条目,即开始放慢平移速度,将系数设置回 1.0