android - 在屏幕上滑动手指激活按钮,就好像它们被按下一样

标签 android button view ontouchlistener sliding

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

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

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

我还读了this thread这建议我们将 View 的 touchListener 与 Activity 中的 gesturelistener 结合起来,但再一次,这对我的情况来说并不是最佳选择。

我还没有尝试将 touchlistener 与 gesturelistener 结合使用,但如果有人告诉我他们没有其他方法,我会继续这样做。

最佳答案

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

我不明白您所说的 ACTION_MOVE 和延迟是什么意思。为了最小化延迟,对 ACTION_DOWN 使用react,如果它在按下状态时悬停在其他键上,然后对 ACTION_MOVE 使用react。没有比这更快的了。对于按钮,有一个重要的延迟,因为当用户在 ACTION_UP 上抬起手指时会触发 onClick() 事件。

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

关于android - 在屏幕上滑动手指激活按钮,就好像它们被按下一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5597592/

相关文章:

java - 为什么我的 ActionListener 不能为我的按钮工作?

javascript - 使用 javascript/jquery 重新启动问答游戏

laravel-5 - Laravel 5.4 中跨 View 共享

android - Bluetooth LE 应用程序,如何构建跨平台(iOS-Android)?

java - 如何在Java、Android上播放Youtube视频?

java - BottomNavigationView高度未包装到底部

ios - Swift - 圆形按钮

Android:来自超大 View 的位图

android - 一键事件使所有 subview 进入按下状态

android - 在显示 UI 的 android 服务中检测 'home button pressed' 事件(类似于 facebook 聊天头)