【问题标题】:Prevent OnTouchEvent on siblings防止兄弟姐妹上的 OnTouchEvent
【发布时间】:2013-04-21 19:45:48
【问题描述】:

如何阻止视图兄弟的 onTouchEvent?我有一个带有自定义按钮的 ViewGroup。当按钮收到 OnTouchEvent 时,我想阻止进一步的 OnTouchEvents 转到按钮的兄弟姐妹。我确实想继续在按钮中接收 OnTouchEvent。

【问题讨论】:

  • 您的 onTouchEvent() 实现是否返回 true(对于自定义按钮)?
  • 是的,它返回 true,但不是在第一个事件上。它等到 onLongClick 通过之后。这似乎在起作用,因为它允许父 ViewPager 接收事件,只要它们立即发生。

标签: android touch-event motionevent


【解决方案1】:

我认为您也应该使用自定义的ViewGroup。为了得到你想要的,你应该重写onInterceptTouchEvent()方法,就像here所说的:

onInterceptTouchEvent() 方法让父母有机会看到 在其孩子之前的任何触摸事件。如果你从 onInterceptTouchEvent(),之前处理的子视图 触摸事件接收一个 ACTION_CANCEL,并且从该点开始的事件 forward 被发送到父级的 onTouchEvent() 方法 处理。 onInterceptTouchEvent() 也可以返回 false 并简单地窥探 在事件沿视图层次结构向下移动到通常的事件时 目标,它将使用自己的 onTouchEvent() 处理事件。

基本上,根据您自己的逻辑(按钮onTouchEvent 等),如果MotionEvent 原始坐标未包含在按钮的可见矩形中,您应该指示您的ViewGroup.onInterceptTouchEvent() 返回true。

【讨论】:

  • 我试过了。它阻止按钮以及兄弟姐妹的进一步事件。这打破了我的按钮!
  • 我要发布一个不同的问题 - 我真正想做的是防止兄弟姐妹收到 onDrag。我认为我在查看 MotionEvents 时采用了错误的方法。
猜你喜欢
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多