Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在已返回true后,将onInterceptTouchEvent结果更改回false_Android - Fatal编程技术网

Android 在已返回true后,将onInterceptTouchEvent结果更改回false

Android 在已返回true后,将onInterceptTouchEvent结果更改回false,android,Android,我有一个FrameLayout,里面有一个GoogleMap对象。我想将用户缩放级别限制在某些缩放级别之间。(这不是关于谷歌地图的问题,而是关于onInterceptTouchEvent行为的一般问题。) 因此,在FrameLayout中,我已经覆盖了onInterceptTouchEvent,当用户按压缩放时,我使用ScaleSteureDetector检测它,并检查地图缩放级别是否在期望值之间 如果是,onInterceptTouchEvent返回false,同级视图(谷歌地图)定期执行缩放

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

因此,在
FrameLayout
中,我已经覆盖了
onInterceptTouchEvent
,当用户按压缩放时,我使用
ScaleSteureDetector
检测它,并检查地图缩放级别是否在期望值之间

如果是,onInterceptTouchEvent返回
false
,同级视图(谷歌地图)定期执行缩放

如果不是,我将返回
true
,这样同级视图就不会收到该手势

但是,这会创建一种行为,即如果按住“缩小”到最大值,然后立即按住“放大”(而不抬起手指),视图将不会放大

这是因为不再调用
onInterceptTouchEvent
(因为我之前已返回true),并且我无法将偶数传递给同级视图

如果我抬起手指,然后按住放大按钮,它会再次工作


我是否可以要求视图重新调用InterceptTouchEvent?

我最终解决了这个问题,在视图组上实现了dispatchTouchEvent,并在您想要取消请求时返回“true”

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

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

  • 用户触摸屏
  • 该活动接收dispatchTouchEvent()
  • 视图组接收dispatchTouchEvent()
  • 视图接收dispatchTouchEvent() 然后,它继续返回:
  • 视图接收onTouchEvent()
  • 视图组接收onTouchEvent()
  • 活动接收onTouchEvent()
  • 如果在任何阶段中返回“true”,它将阻止事件在链中继续

    这已经足够好了,而且有效


    谢谢。

    a好的,您所能做的就是覆盖dispatchTouchEvent并进行您自己的事件调度。我可以直接手动调用我兄弟姐妹的onTouchEvent吗?(如果我没有收到更多的评论,我将测试并让您知道)