gpt4 book ai didi

android - ScrollView 内的 Google Maps API v2 SupportMapFragment - 用户无法垂直滚动 map

转载 作者:IT王子 更新时间:2023-10-28 23:42:36 29 4
gpt4 key购买 nike

我正在尝试将 Google map 放在 ScrollView 中,以便用户可以向下滚动其他内容以查看 map 。问题是这个 ScrollView 吃掉了所有的垂直触摸事件,所以 map 的 UI 体验变得很奇怪。

我知道在谷歌地图 V1 中,您可以覆盖 onTouch 或 setOnTouchListener 以在 MotionEvent.ACTION_DOWN 时调用 requestDisallowInterceptTouchEvent。我曾尝试用 V2 实现类似的技巧,但无济于事。

到目前为止我已经尝试过:

  • 覆盖 SupportMapFragment,并在 onCreateView 内部为 View 设置一个触摸监听器
  • 调用 SupportMapFragment 实例的 .getView(),然后调用 setOnTouchListener
  • 环绕相对布局或框架布局,用透明 View 或 ImageView 屏蔽 fragment

这些都不能解决滚动问题。我在这里错过了什么吗?如果有人在 ScrollView 中有 map 的工作示例,请您分享代码示例吗?

最佳答案

在 map View fragment 上应用透明图像。

<RelativeLayout
android:id="@+id/map_layout"
android:layout_width="match_parent"
android:layout_height="300dp">

<fragment
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="-100dp"
android:layout_marginBottom="-100dp"
android:name="com.google.android.gms.maps.MapFragment"/>

<ImageView
android:id="@+id/transparent_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@color/transparent" />

</RelativeLayout>

然后为主ScrollView设置requestDisallowInterceptTouchEvent(true)。当用户触摸透明图像并移动时,为 MotionEvent.ACTION_DOWNMotionEvent.ACTION_MOVE 禁用透明图像上的触摸,以便 map fragment 可以接受触摸事件。

ScrollView mainScrollView = (ScrollView) findViewById(R.id.main_scrollview);
ImageView transparentImageView = (ImageView) findViewById(R.id.transparent_image);

transparentImageView.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
mainScrollView.requestDisallowInterceptTouchEvent(true);
// Disable touch on transparent view
return false;

case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
mainScrollView.requestDisallowInterceptTouchEvent(false);
return true;

case MotionEvent.ACTION_MOVE:
mainScrollView.requestDisallowInterceptTouchEvent(true);
return false;

default:
return true;
}
}
});

这对我有用。希望对你有帮助。。

关于android - ScrollView 内的 Google Maps API v2 SupportMapFragment - 用户无法垂直滚动 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16974983/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com