处理带有缩放的父ViewGroup和子ImageView之间的onTouchEvent和onTouch?

时间:2014-12-27 18:13:53

标签: android imageview zoom viewgroup

我有一个自定义ZoomableViewGroup,它覆盖onTouchEvent来处理平移/移动动作,并使用ScaleGestureDetector.SimpleOnScaleGestureListener来处理缩放手势。这个ZoomableViewGroup工作正常,直到我尝试在ViewGroup的子节点中使用onTouch。

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

我想知道确保父母的触控功能能够保留其子女的触控功能的好方法。

非常感谢任何帮助或建议!

修改

你的回答非常有帮助杰森,我想我现在开始更好地理解这种情况了。我一直在搞乱我的可缩放视图组onInterceptTouchEvent方法,但我仍然有点困惑

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

如果我的ImageView从它的父ViewGroup收到了ACTION_CANCEL,我该如何得到相关的ACTION_UP信息?

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

1 个答案:

答案 0 :(得分:1)

基本思想是在父视图中覆盖onInterceptTouch,并在那里提供逻辑,以确定是否将触摸传递给子视图(返回false)或实际允许父视图截取/消耗触摸(返回true)。您的逻辑可以是空间的(可能是父视图的边缘是特殊的,但不是内部),或者是手势(可能是水平滑动在父视图级别触发某些内容,垂直滑动在子视图级别触发某些内容,或者在您的视图中例如,简单的点击传递给子按钮,但是父手指消耗了两个手指手势。