【问题标题】:Handling onTouchEvent and onTouch between parent ViewGroup with zoom, and child ImageView?处理带有缩放的父 ViewGroup 和子 ImageView 之间的 onTouchEvent 和 onTouch?
【发布时间】:2014-12-27 18:13:52
【问题描述】:

我有一个自定义 ZoomableViewGroup 覆盖 onTouchEvent 来处理平移/甩动,并使用 ScaleGestureDetector.SimpleOnScaleGestureListener 来处理缩放手势。在我尝试在 ViewGroup 的子项中使用 onTouch 之前,此 ZoomableViewGroup 工作正常。

在这个 ZoomableViewGroup 中,我有多个用作按钮的 ImageView。我希望父母的功能优先于孩子的 onTouch。就目前而言,子 ImageViews 似乎正在拦截触摸事件,而不是将它们传递给它的父级。

我想知道有什么好的方法可以确保父母的触摸功能比孩子的触摸功能保留。

任何帮助或建议将不胜感激!

编辑:

您的回复对 Jason 非常有帮助,我想我现在开始更好地理解这种情况了。我一直在搞乱我的可缩放视图组 onInterceptTouchEvent 方法,但还是有点困惑

  • 您在我的可缩放 ViewGroup 内的 ImageView 上触摸屏幕,
  • ViewGroup.onInterceptYuchEvent 获取 ACTION_DOWN
  • 如果事件是平移或缩放手势,我希望我的 ViewGroup 采取行动,因此我将为 ACTION_DOWN 返回“true”
  • 看来,当我的视图组使用 ACTION_DOWN 事件时,它会发送我的 ImageView.onTouch 'ACTION_CANCEL'
  • 如果前面的 ACTION_MOVE 小于 slop 值,我希望我的 ImageView.onTouch 方法响应 ACTION_UP 事件。

如果我的 ImageView 已经从其父 ViewGroup 收到 ACTION_CANCEL,它应该如何获取相关的 ACTION_UP 信息?

如果我也解释了这里发生的错误,请纠正我!再次感谢!

【问题讨论】:

  • 如果您只想在触摸事件被拖过 slop 值后拦截触摸事件,那么您应该从 onInterceptTouchEvent() 方法返回 false,直到发生这种情况。

标签: android imageview zooming viewgroup


【解决方案1】:

基本思想是在父视图中覆盖onInterceptTouch,并在其中提供是否将触摸传递给子视图(返回false)或实际允许父视图拦截/消费的逻辑触摸(返回true)。您的逻辑可以是空间的(也许父视图的边缘是特殊的,但不是内部的),或手势的(也许水平滑动会在父视图级别触发某些东西,而垂直滑动会在子视图级别触发某些东西,或者在您的在这种情况下,简单的轻击会传递给子按钮,但父级会消耗两个手指手势)。

【讨论】:

  • 如果您不介意再帮我一些忙,我已经对我的问题进行了编辑。再次感谢杰森!
  • 我认为 Corsair 是对的,但它确实令人困惑。如果他的建议没有帮助,也许可以发布您的 onInterceptTouch() 方法。
猜你喜欢
  • 2022-12-30
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多