我有一个FrameLayout,里面有一个GoogleMap对象。我想将用户的缩放级别限制在特定的缩放级别之间。(这不是关于谷歌地图的问题,而是一个关于onInterceptTouchEvent行为的一般性问题。)
因此,在FrameLayout中,我覆盖了onInterceptTouchEvent,当用户缩小缩放时,我会使用ScaleGestureDetector检测到它,并检查地图缩放级别是否在所需的值之间。
如果是,onInterceptTouchEvent会返回false,并且同级视图(Google Maps)会定期执行缩放。
如果它们不是,我返回true,这样同级视图就不会收到这个手势。
然而,这会产生一种行为,即如果您将缩小到最大值,然后立即收缩放大(不抬起手指),视图将不会放大。
这是因为onInterceptTouchEvent不再被调用(因为我之前返回了true ),并且我没有办法将even传递给同级视图。
如果我抬起我的手指,然后收缩放大,它又能工作了。
有没有什么方法可以让视图重新调用onInterceptTouchEvent?
发布于 2014-09-02 16:24:33
我最终解决了这个问题,方法是在视图组上实现dispatchTouchEvent,并在您想要取消请求时返回'true‘。
关于它的工作原理的一些一般信息:
在Android中,这是调用事件的顺序(从第一个到最后一个):
查看用户触摸屏活动接收dispatchTouchEvent()
ViewGroup
如果您在任何阶段返回'true‘,它将停止该事件在链中继续。
它已经足够好了,而且很管用。
谢谢。
https://stackoverflow.com/questions/25603047
复制相似问题