我尝试将GoogleMap放在滚动视图中,这样用户就可以向下滚动其他内容来查看Map。问题是,这种滚动视图正在吞噬所有垂直触摸事件,因此Map的UI体验变得非常怪异。
我知道在谷歌Map的V1中,你可以覆盖onTouch,或者setOnTouchListener,在MotionEvent.ACTION_DOWN上调用requestDisallowInterceptTouchEvent。我已经尝试过在V2中实现类似的技巧,但没有效果。
到目前为止,我已经尝试:
- 覆盖SupportMapFragment,并在onCreateView中为视图设置一个ontouch侦听器
- 调用SupportMapFragment示例的.getView(),然后设置OnTouchListener
- 环绕相对布局或框架布局,使用透明视图或imageview遮罩片段
这些都没有解决滚动的问题。我错过了什么吗?如果有人有一个滚动视图内的Map的工作示例,你能友好地分享代码示例吗?
9条答案
按热度按时间qoefvg9y1#
在Map视图片段上应用透明图像。
然后将主ScrollView设置为
requestDisallowInterceptTouchEvent(true)
,当用户触摸透明图像并移动时,禁用MotionEvent.ACTION_DOWN
和MotionEvent.ACTION_MOVE
的透明图像上的触摸,以便Map片段可以发生触摸事件。这对我很有效。
n3h0vuf22#
我遇到了一个类似的问题,并提出了一个更通用的工作解决方案的基础上,在何毅和Дана ил Димитров回答以上.
tnkciper3#
谢谢你的建议,
经过多次尝试和错误,扯掉我的头发,咒骂监视器和我可怜的Android测试手机,我想,如果我自定义ScrollView,覆盖onInterceptTouchEvent,当事件在Map视图上时,无论如何都返回false,那么Map上的滚动确实会如期发生。
这段代码是用Scala编写的,但您应该明白其中的意思。
注我最终使用了一个原始Map视图(如android-sdks\extras\google\google_play_services\samples\maps\src\com\example\mapdemoRawMapViewDemoActivity.java所示)。我猜你可以对片段做几乎相同的事情,只是我一开始就不喜欢片段。
我觉得谷歌欠我一个道歉。
zwghvu4y4#
我也遇到过同样的问题,所以下面是我如何将解决方案作为java代码使用的,以防有人需要它。在使用它的时候,你只需要设置mapView字段。
643ylb085#
在XML中使用自定义GoogleMap片段。
以下是我使用的完整代码。如果你们有任何问题,请告诉我。
在XML文件中,将以下内容添加为Map片段
这是Map的自定义类
在活动类中添加以下内容,以初始化mapview。就是这样。Tada:)
balp4ylt6#
改进代码,如果您不再需要透明图像:
5lhxktic7#
接受的答案对我不起作用。客人的答案也不起作用(但几乎不起作用)。如果其他人也是这样,请尝试编辑后的客人答案。
如果有人在计算hitbox时需要使用它,我已经注解掉了操作栏高度。
x3naxklr8#
上面列出的大多数选项对我来说都不起作用,但下面的选项对我来说是一个很好的解决方案:
Cheese Barons Solution
我还必须实现与我的实现稍有不同,因为我在片段中使用Map,这使事情稍微复杂一些,但很容易工作。
fzwojiic9#
@Laksh的答案的Kotlin版本:a)实现View.OnTouchListener,B)将onTouch侦听器添加到Activity的onCreate中的透明视图。c)重写函数,如下所示: