【问题标题】:Xamarin Forms Pan gesture speedXamarin Forms Pan 手势速度
【发布时间】:2018-03-16 13:43:50
【问题描述】:

有没有机会改变 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;
}

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

【问题讨论】:

  • 如果根据起始位置测量 Y 轴和 X 轴的位移量,并逐步增加位移的加权因子会怎样?
  • 例如,我尝试将 e.TotalX 值(即从手势开始时 X 方向的变化)相乘,但它不起作用。
  • @SushiHangover 的回答完全符合我的意思! =)

标签: c# xamarin xamarin.forms gesture pan


【解决方案1】:

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

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

当然,这会导致锅“跳”那个因素。

我通常会根据平底锅所处的时间长度对因子应用对数刻度(即,从 1.0 到 5.0 的 10 个双精度的简单硬编码列表,因为在运行时计算真正的对数刻度太过分了) 987654322@状态,平移方向相同/恒定,平移速度恒定。

  • 如果锅被打断 (Completed)
  • 或平移方向发生变化(X|Y 平均-delta 变化符号),

将因子重置回 1 并在 pan 再次为 Started 时重新开始。

  • 如果“速度”降低(X|Y 平均增量小于最后 X 个样本)

将因子重置回之前的日志条目,即开始减慢平移速度,将因子设置回 1.0

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2015-07-10
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多