在Android中检测多个视图上的手势
我正在制作自定义应用内键盘。 键盘是包含许多关键视图的ViewGroup
。 每个按键都需要识别手势,如点击,长按和轻扫/滑动。 如何将手势检测添加到所有按键?
所述SimpleOnGestureListener
方法不触发视图传递MotionEvent
,所以在知道,如果用于所有键的单个姿势检测哪个键被按下了一些困难。
正如我所看到的,有三种选择:
让键盘视图为每个键添加一个新的手势检测器/监听器(或让每个键视图实现其自己的手势检测器)。
可能的问题:不是资源高效? 用户@pskink在这个答案中说(尽管关于与我在这里讨论的有点不同的话题):
在父视图中执行GestureDetector而不是在子视图中,否则如果父视图有n个子视图,则需要n个检测器。
让键盘为每个键添加一个OnTouchListener。 然后自己写我的手势检测代码。
问题:这是重新发明车轮。
将一个GestureDetector
类实现放入OnTouchListener
以便手势侦听器可以访问引用调用OnTouchListener
的视图的成员变量。 这是显示这个的答案。
可能的问题:似乎有多个视图的单个GestureDetector应该是常见的情况。 如果是这样,那么为什么我只能找到一个晦涩难懂的答案来描述如何做到这一点? 如果这种做法会成为问题,我对内存管理也不够了解。
有关GestureOverlayView
:
将GestureDetector设置为所有子视图的唯一答案简洁地表明:
你可以使用GestureOverlayView来查看previus的stackoverflow帖子,了解如何使用它。
虽然GestureOverlayView
的文档很差,但从我所能收集的内容来看,它更多的是识别自定义手势(请参阅此处),而不是将相同的手势集添加到多个视图。