我正在实现一个自定义TextView
,我想在触摸视图时执行一些操作。我认为该onTouchEvent
方法无需使用即可为视图提供全方位的触摸setOnTouchListener
(我想在视图内部而不是在活动中完成所有工作,因此可移植),但是注册的唯一触摸事件是ACTION_DOWN
。如果我OnTouchListener
使用此方法在活动中设置,则会获得全部的触摸事件,但onTouchEvent
没有。
任何人都知道为什么会这样,或者有人可以向我提供不涉及使用的解决方案setOnTouchListener
(这将阻止实现活动设置自己的侦听器)?
你需要返回true才能在发生故障后获取以下事件。
如果我这样做,那么从活动中应用的任何触摸/单击侦听器都不会触发。我不想禁用功能。我只想在分派任何触摸之前对其进行拦截,但仍要分派它们。
dispatchTouchEvent
仅onTouchEvent
再次调用将导致堆栈溢出(笑)。如果您在ViewGroup容器中,则可以重写onInterceptTouchEvent()来监视调度到您的孩子的触摸事件。除此之外(或者直接挂接到dispatchTouchEvent上,不建议这样做),您将无法做自己想要做的事情。MotionEvent分派的基础是通过第一个返回true的接收者找到目标,然后将所有后续事件分派给该目标。
很公平。我想我想知道的是,如何在自定义视图上创建一个触摸侦听器,该侦听器不会不允许实现类具有自己的功能齐全的触摸侦听器,但是您肯定已经在标题中回答了这个问题。
为什么不将您的“事件监视器代码”简单地放在dispatchTouchEvent中?@Override public boolean dispatchTouchEvent(MotionEvent ev){//在这里监控触摸事件,而不是在onTouchEvent内部,然后通常将它们分派为super.dispatchTouchEvent(); }