在返回true之后将onInterceptTouchEvent结果更改回false

时间:2014-09-01 09:47:04

标签: android

我有一个FrameLayout,其中有一个GoogleMap对象。我想将用户缩放级别限制在某些缩放级别之间。 (这不是关于Google地图的问题,而是关于onInterceptTouchEvent行为的一般问题。)

所以在FrameLayout我已覆盖onInterceptTouchEvent,当用户缩放缩放时,我使用ScaleGestureDetector检测到它,并检查地图缩放级别是否在所需值之间。< / p>

如果是,onInterceptTouchEvent会返回false并且同级视图(Google地图)会定期执行缩放。

如果不是,我会返回true,然后兄弟视图就不会收到手势。

然而,这会产生一种行为,如果您捏缩放到最大值然后立即捏放大(不抬起手指),视图将不会放大。

这是因为onInterceptTouchEvent不再被调用(因为我之前已经返回true)并且我无法将偶数传递给兄弟视图。

如果我抬起手指然后捏缩放,它会再次起作用。

无论如何,我可以让视图再次回忆onInterceptTouchEvent吗?

1 个答案:

答案 0 :(得分:0)

我最终通过在viewgroup上实现dispatchTouchEvent并在你想取消请求时返回'true'来解决这个问题。

有关其工作原理的一些一般信息:

在Android中,这是被调用事件的顺序(从头到尾):

  1. 用户触摸屏
  2. 活动收到dispatchTouchEvent()
  3. ViewGroup接收dispatchTouchEvent()
  4. View接收dispatchTouchEvent() 然后继续回来:
  5. View接收onTouchEvent()
  6. ViewGroup收到onTouchEvent()
  7. 活动收到onTouchEvent()
  8. 如果您在任何阶段中返回'true',它将阻止事件在链中继续。

    它足够好并且有效。

    感谢。