gpt4 book ai didi

windows-phone-7 - 使用 Rx 从 TouchLocation 流中解释 "double tap"

转载 作者:行者123 更新时间:2023-12-01 18:36:26 24 4
gpt4 key购买 nike

我有一个 IObservable 并试图从中获取手势。

能够拔出 Tap,但无法将我的头缠绕在 Double Tap 上。

TouchLocation 具有 Position 和 State,因此 Tap 是根据两个标准通过聚合它们得出的。

1) 位置在任何方向上的移动不超过 10px(允许一些移动但不是拖拽)

2) 从“按下”状态的事件开始,一直持续到进入“释放”状态为止

3)“释放”发生在“按下”后 1 秒内

现在我有一个 IObservable >(聚合的结果)并且需要产生双击。

如何返回第一个手势(以产生初始点击),然后用第二个手势替换双击手势,但前提是在 1 秒计时器之前收到第二次点击。如果在计时器之后收到,那么它也应该是一个简单的 Tap。

最佳答案

一个有趣的问题。

// Setup some parameters
var singleTapInterval = TimeSpan.FromSeconds(0.5);
var dblTapInterval = TimeSpan.FromSeconds(1);

// the source of touches
IObservable<TouchLocation> txs;

// Get single taps
// 0, 1, but no more than
// 2 touches in the timespan
IObservable<TouchLocation> taps = txs.Buffer(2,singleTapInterval)
.Where(touches => touches.Count == 2 &&
touches[0].state == "Pressed" &&
touches[1].state == "Released" &&
distance(touches) < distanceThreshold)
.Select(touches => touches[1]);

// now detect double taps
IObservable<TapKind> dbltaps = taps.Buffer(2,dblTapInterval)
.Where(taps => taps.Count == 2)
.Select(_ => TapKind.SingleTap);

// detect single taps - taps must be _slower_ than the dblTapInterval
// for this to work
IObservable<TapKind> singletaps = taps.Throttle(dblTapInterval)
.Select(_ => TapKind.SingleTap);

// compbine the two, so we see either tap condition
IObservable<TapKind> interestingTaps = dbltaps.Merge(singletaps);

关于windows-phone-7 - 使用 Rx 从 TouchLocation 流中解释 "double tap",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com