我实现这一目标的一种方法是重写以下方法:
public boolean onInterceptTouchEvent(MotionEvent event){ super.onInterceptTouchEvent(event); ...您可以在布局容器中覆盖此方法(例如,ViewGroup或按住按钮的任何对象),然后继续
false从该方法返回以“拦截”子项
View(例如,按钮)消耗的触摸事件。然后,在该重写的方法中,您可以使用
MotionEvents
调用手势检测器对象。该方法还“看到”以
ViewGroup自身为目标的事件,这意味着-如果我没记错的话-您 只需
要从该方法中调用手势检测器,这样做,手势检测器将“查看” 所有内容
事件,无论它们是否在按钮上方。因此,如果您从一个按钮开始拖动手指,然后在布局背景上的某个点结束拖动手指,则手势检测器应该可以看到整个滑动。您不需要向手势检测器提供来自布局本身的事件,
onTouchEvent()因为它已经看到了它们。
第二种方式:
我只是查看了我在其中使用过此项目的项目,并意识到我切换到了另一种方式。我实际上所做的是我设计了所有的子对象
View,以便父代
Activity(或包含
ViewGroup)可以向所有这些子对象注册相同的手势检测器对象
View(我的每个特殊对象
View都有一个称为的方法
registerGestureDetector())。然后,在我的孩子
Views中被覆盖的“
onTouchEvent()”中,将
MotionEvents
传递给已向其注册的手势检测器
View。换句话说,父级
ViewGroup布局和所有子级
View仅共享同一手势检测器。
我意识到这听起来有点麻烦,并且考虑到可以使用来完成
onInterceptTouchEvent(),但没有必要,但是我的应用程序处理了一些非常复杂的规则,涉及到我
View需要如何响应触摸事件和手势,因此我可以应用一些规则。我需要针对我的应用程序的其他逻辑。但是,我在这两种方法中都达到了相同的基本目标:
MotionEvent将以
Views为目标的s
引导到同一手势检测器对象。



