首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在已经返回true之后,将onInterceptTouchEvent结果改回false

在已经返回true之后,将onInterceptTouchEvent结果改回false
EN

Stack Overflow用户
提问于 2014-09-01 17:47:04
回答 1查看 389关注 0票数 0

我有一个FrameLayout,里面有一个GoogleMap对象。我想将用户的缩放级别限制在特定的缩放级别之间。(这不是关于谷歌地图的问题,而是一个关于onInterceptTouchEvent行为的一般性问题。)

因此,在FrameLayout中,我覆盖了onInterceptTouchEvent,当用户缩小缩放时,我会使用ScaleGestureDetector检测到它,并检查地图缩放级别是否在所需的值之间。

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

如果它们不是,我返回true,这样同级视图就不会收到这个手势。

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

这是因为onInterceptTouchEvent不再被调用(因为我之前返回了true ),并且我没有办法将even传递给同级视图。

如果我抬起我的手指,然后收缩放大,它又能工作了。

有没有什么方法可以让视图重新调用onInterceptTouchEvent

EN

回答 1

Stack Overflow用户

发布于 2014-09-02 16:24:33

我最终解决了这个问题,方法是在视图组上实现dispatchTouchEvent,并在您想要取消请求时返回'true‘。

关于它的工作原理的一些一般信息:

在Android中,这是调用事件的顺序(从第一个到最后一个):

查看用户触摸屏活动接收dispatchTouchEvent()

  • The dispatchTouchEvent()

  • The接收onTouchEvent()

  • The查看接收dispatchTouchEvent()然后继续返回:

  • 查看接收onTouchEvent()

  • The活动接收onTouchEvent()

  • The活动接收onTouchEvent()

ViewGroup

如果您在任何阶段返回'true‘,它将停止该事件在链中继续。

它已经足够好了,而且很管用。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25603047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档