4

如果我的标题不够清楚,我将详细解释:

假设我们有一个充满多个按钮(10+)的屏幕,我们按下一个按钮,激活 onTouch/onClick。如果我们现在移动手指而不抬起它,我希望它能够激活它滑过的任何其他按钮。在这种特殊情况下,我希望在您滑过虚拟钢琴时播放声音。

我知道 onTouchListener 解决方案,您可以在其中注册每个 ACTION_MOVE 并找到一些激活新事件的边界,但是如果您有多个按钮并希望允许无延迟地平滑滑动,这远非最佳。

我还阅读了这个帖子,它建议我们将 View 的 touchListener 与来自 Activity 的手势侦听器结合起来,但再一次,这对我的情况来说根本不是最优的。

我还没有尝试将触摸监听器与手势监听器结合使用,但如果有人告诉我他们没有其他方法可以做到这一点,我会继续这样做。

4

2 回答 2

4

在我看来,这样做的正确方法是忘记按钮,并创建一个绘制整个键盘的自定义视图。在此视图中,您可以按照自己喜欢的方式处理触摸事件。您甚至不需要手势检测器,只需分析运动事件的动作和坐标,非常简单。

我不明白你所说的 ACTION_MOVE 和延迟是什么意思。为了最大限度地减少延迟,对 ACTION_DOWN 做出反应,然后在 ACTION_MOVE 上(如果它在向下状态下悬停其他键)做出反应。它不能比这更快。使用按钮有一个重要的延迟,因为 onClick() 事件在用户抬起手指时触发,在 ACTION_UP 上。

按钮并不像您描述的那样工作。这个想法是,如果用户点击一个按钮,然后同时将他的手指移开,它不会触发周围其他视图的 onClick 事件。这可以防止虚假点击。

于 2011-04-08T18:16:43.403 回答
1

实际上,我采取了“简单”的方式,并使用了带有 onTouch 方法的按钮,ACTION_DOWNACTION_MOVE结合了坐标计算,event.getX()event.getY()允许我检测当前悬停的按钮。它有 13 个按钮,无延迟。

于 2011-12-18T11:04:24.503 回答