我正在尝试将Google Map 放在滚动视图中,以便用户可以向下滚动其他内容以查看 Map . 问题是这个滚动视图占用了所有垂直触摸事件,因此 Map 的UI体验变得非常奇怪 .
我知道在谷歌 Map 的V1中,您可以覆盖onTouch或setOnTouchListener以在MotionEvent.ACTION_DOWN上调用requestDisallowInterceptTouchEvent . 我试图用V2实现类似的技巧无济于事 .
到目前为止,我尝试过:
-
覆盖SupportMapFragment,并在onCreateView中为View设置触摸侦听器
-
调用SupportMapFragment实例的.getView(),然后调用setOnTouchListener
-
环绕相对布局或框架布局,使用透明视图或图像视图遮罩片段
这些都没有解决滚动问题 . 我在这里错过了什么吗?如果有人在滚动视图中有一个 Map 的工作示例,请您分享代码示例吗?
8 回答
上面列出的大多数选项对我来说都不起作用,但以下证明对我来说是一个很好的解决方案:
Cheese Barons Solution
我也必须实现与我的实现略有不同,因为我在片段中使用 Map ,这使得事情稍微复杂但易于工作 .
在mapview片段上应用透明图像 .
然后为主ScrollView设置
requestDisallowInterceptTouchEvent(true)
. 当用户触摸透明图像并移动时,禁用透明图像上的触摸MotionEvent.ACTION_DOWN
和MotionEvent.ACTION_MOVE
,以便 Map 片段可以进行触摸事件 .这对我有用 . 希望它可以帮助你..
我遇到了类似的问题,并提出了一个基于In-Ho Yi和上面的ДанаилДимитров答案的更通用的工作解决方案 .
谢谢你的建议,
经过多次尝试和错误,拔掉我的头发,咒骂显示器和我糟糕的Android测试手机,我想如果我自定义ScrollView,重写onInterceptTouchEvent,当事件在 Map 视图上时我们返回false什么,然后 Map 上的滚动确实按预期发生 .
这段代码在Scala中,但你明白了 .
注意我最终使用了原始 Map 视图(如android-sdks \ extras \ google \ google_play_services \ samples \ maps \ src \ com \ example \ mapdemoRawMapViewDemoActivity.java中所示) . 猜猜你可以用片段做同样的事情,我从来没有喜欢片段 .
我认为Google欠我一个道歉 .
我有同样的问题,所以这里是我如何使用解决方案作为Java代码,以防任何人需要它 . 您只需在使用时设置mapView字段 .
接受的答案在我的案例中不起作用 . 客人的回答既没有(但差不多) . 如果是其他人的情况,请尝试访客回答的这个编辑版本 .
如果有人在计算hitbox时需要使用它,我已经注释掉了操作栏的高度 .
如果您不再需要透明图像,请改进代码:
在XML中使用自定义Google Map 片段 .
这是完整的代码,对我有用 . 如果您有任何疑问,请告诉我 .
In your XML file, add the following as map fragment
Here is the custom class for map
Add the following in your activity class, to initialize mapview. That's it. Tada :)